<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Seemingly Online</title>
    <link>https://seeminglyjs.tistory.com/</link>
    <description>이모저모 방방곡곡 두루두루 개발지식 저장소</description>
    <language>ko</language>
    <pubDate>Sat, 20 Jun 2026 13:38:29 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Seeminglyjs</managingEditor>
    <image>
      <title>Seemingly Online</title>
      <url>https://tistory1.daumcdn.net/tistory/3378312/attach/bd60a365f96b49f8aee5abfe4956e47c</url>
      <link>https://seeminglyjs.tistory.com</link>
    </image>
    <item>
      <title>Flutter에서 Android SDK 35 및 NDK 충돌 해결 정리</title>
      <link>https://seeminglyjs.tistory.com/642</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2025-07-21&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;715&quot; data-origin-height=&quot;587&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eB0LS2/btsPpSFRL1w/KdlIFehKBhoovtFoaDMtD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eB0LS2/btsPpSFRL1w/KdlIFehKBhoovtFoaDMtD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eB0LS2/btsPpSFRL1w/KdlIFehKBhoovtFoaDMtD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeB0LS2%2FbtsPpSFRL1w%2FKdlIFehKBhoovtFoaDMtD0%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;449&quot; height=&quot;369&quot; data-origin-width=&quot;715&quot; data-origin-height=&quot;587&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 문제&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1753065820326&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;A failure occurred while executing com.android.build.gradle.internal.res.LinkApplicationAndroidResourcesTask$TaskAction
   &amp;gt; Android resource linking failed
     aapt2 ... Failed to load resources table in APK '/Users/xxx/Library/Android/sdk/platforms/android-35/android.jar'.
     error: failed to load include path ...&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_1753066096954&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;* What went wrong:
Execution failed for task ':app:processDebugResources'.
&amp;gt; A failure occurred while executing com.android.build.gradle.internal.res.LinkApplicationAndroidResourcesTask$TaskAction
   &amp;gt; Android resource linking failed
     aapt2 E 07-21 11:22:27 15338 153482 LoadedArsc.cpp:94] RES_TABLE_TYPE_TYPE entry offsets overlap actual entry data.
     aapt2 E 07-21 11:22:27 15338 153482 ApkAssets.cpp:149] Failed to load resources table in APK '/Users/XXXXXXXX/Library/Android/sdk/platforms/android-35/android.jar'.
     error: failed to load include path /Users/jangsungwoo/Library/Android/sdk/platforms/android-35/android.jar.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;원인: android-35의 android.jar 파일이 제대로 설치되지 않았거나, AGP(Gradle Plugin)가 SDK 35를 지원하지 않아서 발생&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. 해결 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Gradle 버전 업그레이드&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1753065850627&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;./gradlew wrapper --gradle-version=8.9&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;AGP(Android Gradle Plugin) 버전 업그레이드 (&lt;span style=&quot;background-color: #e3e6e8; color: #0c0d0e; text-align: left;&quot;&gt;settings.gradle&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1753065900468&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;plugins {
    ...
    id &quot;com.android.application&quot; version &quot;8.5.0&quot; apply false
    ...
}&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;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이후 다시 flutter clean 및 flutter pub get, flutter run 하시면 SDK 35 관련 오류는 해결됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;3. 추가 문제&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Android NDK 버전 충돌 문제 해결&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1753065949453&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Your project is configured with Android NDK 23.1.7779620,
but the following plugin(s) depend on a different Android NDK version:
- appsflyer_sdk requires Android NDK 26.1.10909125
...
Fix this issue by using the highest Android NDK version.&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;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Flutter에서 사용하는 android/app/build.gradle 파일에 아래와 같이 ndkVersion을 &lt;b&gt;명시적으로 하드코딩&lt;/b&gt;:&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1753065967796&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;android {
    compileSdkVersion 35
    ndkVersion &quot;26.1.10909125&quot;

    ...
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>App/Flutter</category>
      <category>a failure occurred while executing com.android.build.gradle.internal.res.linkapplicationandroidresourcestask$taskaction</category>
      <category>aapt2 e 07-22 17:30:35 77990 77990 loadedarsc.cpp:94] res_table_type_type entry offsets overlap actual entry data.</category>
      <category>flutter android sdk 35</category>
      <category>flutter build gradle</category>
      <category>flutter ndkversion</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/642</guid>
      <comments>https://seeminglyjs.tistory.com/642#entry642comment</comments>
      <pubDate>Mon, 21 Jul 2025 11:48:33 +0900</pubDate>
    </item>
    <item>
      <title>JPA save() vs saveAndFlush() 동작원리</title>
      <link>https://seeminglyjs.tistory.com/641</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2025-07-02&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;marek-piwnicki-78oufSOElMk-unsplash.jpg&quot; data-origin-width=&quot;5472&quot; data-origin-height=&quot;3512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lY2nh/btsO1HxqVrt/vV0bNd5kTsrVWwYwkNGYO1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lY2nh/btsO1HxqVrt/vV0bNd5kTsrVWwYwkNGYO1/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Marek Piwnicki&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lY2nh/btsO1HxqVrt/vV0bNd5kTsrVWwYwkNGYO1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlY2nh%2FbtsO1HxqVrt%2FvV0bNd5kTsrVWwYwkNGYO1%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;352&quot; height=&quot;226&quot; data-filename=&quot;marek-piwnicki-78oufSOElMk-unsplash.jpg&quot; data-origin-width=&quot;5472&quot; data-origin-height=&quot;3512&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Marek Piwnicki&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;save() vs saveAndFlush() 차이점&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 180px;&quot; border=&quot;1&quot; data-end=&quot;587&quot; data-start=&quot;193&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;항목&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;save()&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;saveAndFlush()&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot; data-end=&quot;344&quot; data-start=&quot;269&quot;&gt;
&lt;td style=&quot;height: 40px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;274&quot; data-start=&quot;269&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;기능&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot; data-end=&quot;315&quot; data-start=&quot;274&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;엔티티를 영속성 컨텍스트(Persistence Context)에 저장&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot; data-end=&quot;344&quot; data-start=&quot;315&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;엔티티 저장 + flush()를 즉시 호출&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot; data-end=&quot;417&quot; data-start=&quot;345&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;356&quot; data-start=&quot;345&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;DB 반영 시점&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; data-end=&quot;392&quot; data-start=&quot;356&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;flush 시점 (트랜잭션 커밋 or 명시적 flush 시)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; data-end=&quot;417&quot; data-start=&quot;392&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;즉시 flush &amp;rarr; DB에 SQL 실행&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot; data-end=&quot;477&quot; data-start=&quot;418&quot;&gt;
&lt;td style=&quot;height: 40px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;447&quot; data-start=&quot;418&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;트랜잭션 내에서 커밋 전까지 DB에서 조회 불가&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot; data-end=&quot;454&quot; data-start=&quot;447&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;✅ 가능&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot; data-end=&quot;477&quot; data-start=&quot;454&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;❌ flush로 DB에 즉시 반영됨&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot; data-end=&quot;526&quot; data-start=&quot;478&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;483&quot; data-start=&quot;478&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;성능&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; data-end=&quot;503&quot; data-start=&quot;483&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;일반적으로 더 효율적 (버퍼링)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; data-end=&quot;526&quot; data-start=&quot;503&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;성능 비용 있음 (즉시 DB IO)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot; data-end=&quot;587&quot; data-start=&quot;527&quot;&gt;
&lt;td style=&quot;height: 40px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;534&quot; data-start=&quot;527&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;주 용도&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot; data-end=&quot;549&quot; data-start=&quot;534&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;일반적인 CRUD 처리&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot; data-end=&quot;587&quot; data-start=&quot;549&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;DB에 즉시 반영해야 할 때 (예: ID, 제약조건 확인 등)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;왜 둘 다 존재하는가?&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;711&quot; data-start=&quot;616&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;665&quot; data-start=&quot;616&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;save()는 일반적인 &lt;b&gt;&quot;지연 쓰기&quot; 전략&lt;/b&gt;에 최적화되어 있어 성능이 좋음.&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;711&quot; data-start=&quot;666&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;하지만 실무에서는 다음과 같은 &lt;b&gt;즉시 DB 반영이 필요한 시점&lt;/b&gt;이 존재함:&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-end=&quot;748&quot; data-start=&quot;713&quot; data-ke-style=&quot;style2&quot;&gt;  대표적인 saveAndFlush() 사용 케이스&lt;/blockquote&gt;
&lt;p data-end=&quot;748&quot; data-start=&quot;713&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;748&quot; data-start=&quot;713&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;-&amp;nbsp;`saveAndFlush()`는&amp;nbsp;동일&amp;nbsp;트랜잭션&amp;nbsp;내에서&amp;nbsp;JPA&amp;nbsp;쿼리로&amp;nbsp;곧바로&amp;nbsp;조회해야&amp;nbsp;할&amp;nbsp;때&amp;nbsp;사용합니다.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;748&quot; data-start=&quot;713&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;748&quot; data-start=&quot;713&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;- 이 경우 flush가 되지 않으면 영속성 컨텍스트에만 존재하므로 JPQL 등에서 조회 불가한 경우가 있음.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;748&quot; data-start=&quot;713&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;748&quot; data-start=&quot;713&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;-&amp;nbsp;다만,&amp;nbsp;다른&amp;nbsp;커넥션&amp;nbsp;또는&amp;nbsp;트랜잭션에서&amp;nbsp;직접&amp;nbsp;DB에&amp;nbsp;접근해도&amp;nbsp;보이지&amp;nbsp;않으며,&amp;nbsp;트랜잭션이&amp;nbsp;commit&amp;nbsp;되어야만&amp;nbsp;외부에서&amp;nbsp;확인할&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;flush() vs commit&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1148&quot; data-start=&quot;1067&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1118&quot; data-start=&quot;1067&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;flush() = 영속성 컨텍스트의 변경 내용을 &lt;b&gt;SQL로 변환하여 DB에 반영&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;1148&quot; data-start=&quot;1119&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;commit = 트랜잭션 &lt;b&gt;종료 및 확정&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;flush() &amp;rArr; SQL 실행 (하지만 트랜잭션은 열려 있음) commit &amp;rArr; 트랜잭션 종료 (이때 자동으로 flush 발생)&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;@Transactional 안에서 saveAndFlush()&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1751443667023&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Transactional
public void saveAndImmediatelyCheck() {
    MyEntity saved = repository.saveAndFlush(myEntity);
    // 여기서 DB에 SQL이 실제 실행됨 &amp;rarr; DB에 물리적으로 반영되어 있음
    // 이후 Native Query 또는 다른 Connection으로도 조회 가능
}&lt;/code&gt;&lt;/pre&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 data-end=&quot;1576&quot; data-start=&quot;1509&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;✅ &lt;b&gt;YES, saveAndFlush()는 @Transactional 내부에서도 DB에 즉시 반영됩니다.&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;1647&quot; data-start=&quot;1577&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;단, 트랜잭션이 &lt;b&gt;rollback되면 전체 변경사항은 되돌아감&lt;/b&gt; (flush는 SQL을 날릴 뿐, 트랜잭션은 살아있음)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;주의 사항&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;@Transactional 메서드 내부에서 saveAndFlush() 실행&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;164&quot; data-start=&quot;136&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;트랜잭션은 아직 commit 되지 않은 상태&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;216&quot; data-start=&quot;165&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이 상태에서 &lt;b&gt;DB에 직접 쿼리(다른 커넥션으로)&lt;/b&gt; 날려서 해당 데이터를 조회할 경우&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;결과는?&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;조회할 수 없습니다. (변경 사항이 보이지 않음)&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-end=&quot;349&quot; data-start=&quot;272&quot; data-ke-style=&quot;style2&quot;&gt;즉, saveAndFlush()로 DB에 SQL이 날아가긴 하지만, 같은 트랜잭션 내에서만 보일 뿐 외부에서는 보이지 않습니다.&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이유: 트랜잭션 격리 수준 (Isolation Level)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;기본적으로 Spring + JPA + RDBMS (예: MySQL, PostgreSQL) 조합에서 사용하는 격리 수준은:&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;READ COMMITTED 또는 그 이상 (REPEATABLE READ, SERIALIZABLE)&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;542&quot; data-start=&quot;528&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;542&quot; data-start=&quot;528&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이 말은 다음과 같습니다:&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;664&quot; data-start=&quot;544&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;581&quot; data-start=&quot;544&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;트랜잭션 내에서 &lt;b&gt;flush() &amp;rarr; SQL 실행&lt;/b&gt;은 되지만,&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;629&quot; data-start=&quot;582&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;트랜잭션 &lt;b&gt;commit 전까지는 다른 커넥션에서 해당 변경사항이 보이지 않음&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;664&quot; data-start=&quot;630&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;즉, &lt;b&gt;자기 자신의 트랜잭션 범위 내에서만 확인 가능&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;정리된 흐름&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;899&quot; data-start=&quot;684&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;구분&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;설명&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;752&quot; data-start=&quot;712&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;723&quot; data-start=&quot;712&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;save()&lt;/span&gt;&lt;/td&gt;
&lt;td data-end=&quot;752&quot; data-start=&quot;723&quot; data-col-size=&quot;md&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;영속성 컨텍스트에만 저장됨 (flush 안됨)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;828&quot; data-start=&quot;753&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;772&quot; data-start=&quot;753&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;saveAndFlush()&lt;/span&gt;&lt;/td&gt;
&lt;td data-end=&quot;828&quot; data-start=&quot;772&quot; data-col-size=&quot;md&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;SQL이 DB로 전송되어 실행됨 (&amp;rarr; 하지만 트랜잭션이 열린 상태이므로 commit되지 않음)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;870&quot; data-start=&quot;829&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;840&quot; data-start=&quot;829&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;외부 DB 쿼리&lt;/span&gt;&lt;/td&gt;
&lt;td data-end=&quot;870&quot; data-start=&quot;840&quot; data-col-size=&quot;md&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;다른 커넥션에서 조회 &amp;rarr; 변경 내용 보이지 않음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;899&quot; data-start=&quot;871&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;884&quot; data-start=&quot;871&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;트랜잭션 커밋 이후&lt;/span&gt;&lt;/td&gt;
&lt;td data-end=&quot;899&quot; data-start=&quot;884&quot; data-col-size=&quot;md&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;외부에서도 조회 가능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;실무에서 자주 오해하는 부분&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1019&quot; data-start=&quot;928&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;saveAndFlush()는 &lt;b&gt;DB에 SQL을 날리긴 하지만&lt;/b&gt;, 트랜잭션이 끝나지 않았기 때문에 &lt;b&gt;다른 커넥션에서는 변경 내용을 볼 수 없다&lt;/b&gt;는 점.&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;1066&quot; data-start=&quot;1020&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이건 &lt;b&gt;ACID 중 &amp;lsquo;Isolation&amp;rsquo;&lt;/b&gt; 속성 때문에 보장되는 동작입니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;예시 (다른 커넥션으로 조회)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1751444041103&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Transactional
public void testFlushBehavior() {
    MyEntity e = new MyEntity(&quot;abc&quot;);
    repository.saveAndFlush(e); // INSERT 쿼리는 실행됨

    // 다른 DataSource / JDBC 연결에서 동일 row를 SELECT 해도 &amp;rarr; 조회 불가
    // 현재 트랜잭션이 커밋되지 않았기 때문
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;실무 팁&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1410&quot; data-start=&quot;1352&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;saveAndFlush()는 &quot;바로 쿼리 날리고, 이후 로직에서 JPA로 바로 조회할 때&quot; 유용함&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;1466&quot; data-start=&quot;1411&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;외부 시스템에서 조회하거나 DB Trigger 테스트할 때는 commit()도 완료되어야 함&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;1499&quot; data-start=&quot;1467&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;DB에 눈으로 확인하려면 트랜잭션이 끝나야 한다&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;결론&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1730&quot; data-start=&quot;1515&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;질문&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;답변&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1599&quot; data-start=&quot;1543&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1583&quot; data-start=&quot;1543&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;saveAndFlush() 후 DB에 직접 쿼리하면 값 보이나?&lt;/span&gt;&lt;/td&gt;
&lt;td data-end=&quot;1599&quot; data-start=&quot;1583&quot; data-col-size=&quot;md&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;❌ &lt;b&gt;보이지 않음&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1677&quot; data-start=&quot;1600&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1607&quot; data-start=&quot;1600&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이유는?&lt;/span&gt;&lt;/td&gt;
&lt;td data-end=&quot;1677&quot; data-start=&quot;1607&quot; data-col-size=&quot;md&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;트랜잭션이 아직 commit되지 않았기 때문. 트랜잭션 격리 수준에 따라 외부 커넥션에서는 변경 사항이 보이지 않음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1730&quot; data-start=&quot;1678&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1690&quot; data-start=&quot;1678&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;언제 확인 가능?&lt;/span&gt;&lt;/td&gt;
&lt;td data-end=&quot;1730&quot; data-start=&quot;1690&quot; data-col-size=&quot;md&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;@Transactional 메서드가 &lt;b&gt;끝나서 커밋된 이후&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%ED%99%94%EB%A0%A4%ED%95%9C-%ED%95%98%EB%8A%98%EC%9D%84-%EB%B0%B0%EA%B2%BD%EC%9C%BC%EB%A1%9C-%EB%88%88-%EB%8D%AE%EC%9D%B8-%EC%82%B0-78oufSOElMk?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@marekpiwnicki?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Marek Piwnicki&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>WEB/JPA</category>
      <category>jpa save() vs saveandflush() 동작원리</category>
      <category>save()</category>
      <category>save() vs saveandflush()</category>
      <category>save()와 saveandflush() 차이</category>
      <category>saveandflush()</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/641</guid>
      <comments>https://seeminglyjs.tistory.com/641#entry641comment</comments>
      <pubDate>Wed, 2 Jul 2025 17:23:41 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot에서 @Async + MultipartFile 조합 시 발생하는 오류 정리 및 해결 방법</title>
      <link>https://seeminglyjs.tistory.com/640</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-01-02&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;marek-piwnicki-JBIIMCEwROI-unsplash.jpg&quot; data-origin-width=&quot;5396&quot; data-origin-height=&quot;3307&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nOp5q/btsOWHSCSSE/cnlkfSKm6sEh6stL1WQsSK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nOp5q/btsOWHSCSSE/cnlkfSKm6sEh6stL1WQsSK/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Marek Piwnicki&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nOp5q/btsOWHSCSSE/cnlkfSKm6sEh6stL1WQsSK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnOp5q%2FbtsOWHSCSSE%2FcnlkfSKm6sEh6stL1WQsSK%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;584&quot; height=&quot;358&quot; data-filename=&quot;marek-piwnicki-JBIIMCEwROI-unsplash.jpg&quot; data-origin-width=&quot;5396&quot; data-origin-height=&quot;3307&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Marek Piwnicki&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;개요&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Spring Boot에서 비동기 처리를 위해 @Async를 활용할 때, 일반적인 서비스 로직에서는 잘 동작하지만 MultipartFile을 사용하는 경우 예상치 못한 NoSuchFileException 오류가 발생할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;382&quot; data-start=&quot;342&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이번 글에서는 해당 오류의 원인과 해결 방법을 구체적으로 살펴보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;문제 상황&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;MultipartFile 파라미터를 @RequestPart로 컨트롤러에서 받고, 그 값을 DTO에 담아 @Async 메서드로 넘긴 뒤, 내부에서 multipartFile.transferTo() 또는 getInputStream() 등을 호출하면 아래와 같은 오류가 발생합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1751333837896&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;java.nio.file.NoSuchFileException: /private/.../upload_xxxx.tmp&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;원인 분석&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;MultipartFile의 실제 파일 내용은 **Servlet 컨테이너(Tomcat)**가 multipart 요청을 처리하면서 임시 디렉토리에 저장해 둡니다. 그런데 이 임시 파일은 &lt;b&gt;요청 스레드 생명주기 내에서만 유효&lt;/b&gt;합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;871&quot; data-start=&quot;845&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;따라서 아래와 같이 처리하면 문제가 발생합니다:&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;871&quot; data-start=&quot;845&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1751333870847&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@PostMapping(&quot;/upload&quot;)
public void upload(@RequestPart MultipartFile file) {
    asyncService.process(file); // ❌ 위험한 코드: @Async 메서드에서 MultipartFile 접근
}&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1081&quot; data-start=&quot;1041&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이때 process() 메서드는 @Async로 정의되어 있고,&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;1128&quot; data-start=&quot;1082&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;요청 스레드는 파일을 받은 후 컨트롤러를 빠져나가면서 &lt;b&gt;임시 파일을 제거&lt;/b&gt;함&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;1215&quot; data-start=&quot;1129&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이후 Async 스레드가 file.getBytes()나 file.transferTo() 등을 호출하면 &lt;b&gt;파일이 존재하지 않음 &amp;rarr; 예외 발생&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;해결 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-end=&quot;1280&quot; data-start=&quot;1235&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1280&quot; data-start=&quot;1235&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;1. MultipartFile &amp;rarr; byte[]로 즉시 변환해서 전달&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;1363&quot; data-start=&quot;1282&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;가장 명확하고 안전한 방법은, MultipartFile을 @Async 메서드로 넘기기 전에 즉시 byte[]로 변환해 넘기는 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1751333916810&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@PostMapping(&quot;/upload&quot;)
public void upload(@RequestPart MultipartFile file) {
    try {
        byte[] fileBytes = file.getBytes();
        String originalFilename = file.getOriginalFilename();
        asyncService.processAsync(fileBytes, originalFilename);
    } catch (IOException e) {
        // handle error
    }
}&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;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Async 메서드:&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1751333935053&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Async
public void processAsync(byte[] fileBytes, String fileName) {
    // 안전하게 사용 가능
    Files.write(Paths.get(&quot;/path&quot;, fileName), fileBytes);
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. DTO 내에서 MultipartFile이 아닌 List&amp;lt;SubImageDTO&amp;gt; 구조로 받기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1751333963397&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Data
@Builder
public static class SubImageDTO {
    private String fileName;
    private byte[] bytes;
}&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;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;컨트롤러에서 변환 후 DTO에 주입:&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1751333983769&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;List&amp;lt;SubImageDTO&amp;gt; subImageDTOList = files.stream().map(file -&amp;gt; {
    try {
        return SubImageDTO.builder()
            .fileName(file.getOriginalFilename())
            .bytes(file.getBytes())
            .build();
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}).collect(Collectors.toList());&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;2461&quot; data-start=&quot;2424&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;테스트 환경에서만 잘 되고, 실서버에서 실패하는 이유?&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-end=&quot;2461&quot; data-start=&quot;2424&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2556&quot; data-start=&quot;2463&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;로컬 개발 환경에선 요청 처리 속도나 비동기 큐 처리가 상대적으로 느려서 &lt;b&gt;파일 삭제 타이밍&lt;/b&gt;이 Async 실행보다 느려져서 &lt;b&gt;우연히 잘 동작&lt;/b&gt;할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;2571&quot; data-start=&quot;2558&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;그러나 실제 서버에서는:&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2661&quot; data-start=&quot;2573&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2593&quot; data-start=&quot;2573&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Async 스레드 풀이 별도 동작&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2623&quot; data-start=&quot;2594&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Tomcat은 컨트롤러 반환 직후 임시 파일 정리&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2661&quot; data-start=&quot;2624&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;결과적으로 @Async 내에서 파일 접근 시도 &amp;rarr; 파일 없음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;2676&quot; data-start=&quot;2668&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;결론&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;h4 data-end=&quot;2676&quot; data-start=&quot;2668&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-end=&quot;2676&quot; data-start=&quot;2668&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #333333; font-size: 16px; letter-spacing: 0px;&quot;&gt;구분설명&lt;/span&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;2903&quot; data-start=&quot;2678&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;2903&quot; data-start=&quot;2706&quot;&gt;
&lt;tr data-end=&quot;2757&quot; data-start=&quot;2706&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2717&quot; data-start=&quot;2706&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;❌ 잘못된 방식&lt;/span&gt;&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;2757&quot; data-start=&quot;2717&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;MultipartFile을 그대로 @Async로 넘기는 것&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2815&quot; data-start=&quot;2758&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2768&quot; data-start=&quot;2758&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;✅ 추천 방식&lt;/span&gt;&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;2815&quot; data-start=&quot;2768&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;MultipartFile &amp;rarr; byte[] 혹은 DTO로 변환해서 넘기기&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2903&quot; data-start=&quot;2816&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2830&quot; data-start=&quot;2816&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;  피해야 할 패턴&lt;/span&gt;&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;2903&quot; data-start=&quot;2830&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;@Async 내에서 file.getInputStream(), file.transferTo() 등 직접 파일 핸들링&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;팁: MultipartFile을 저장할 때 안전하게 처리하는 유틸&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1751334023098&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public static File byteArrayToFile(String path, byte[] bytes, String fileName) {
    try {
        Path dir = Paths.get(path);
        if (!Files.exists(dir)) {
            Files.createDirectories(dir);
        }
        Path destinationFile = dir.resolve(fileName);
        Files.write(destinationFile, bytes);
        return destinationFile.toFile();
    } catch (IOException e) {
        throw new RuntimeException(&quot;파일 저장 실패&quot;, e);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;3427&quot; data-start=&quot;3415&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;참고 사항&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;3596&quot; data-start=&quot;3429&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;3531&quot; data-start=&quot;3429&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Spring Boot Multipart 설정은 기본적으로 CommonsMultipartResolver 또는 StandardServletMultipartResolver를 사용&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;3596&quot; data-start=&quot;3532&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;기본 임시 저장 경로는 OS 의 /tmp 또는 macOS에서는 /private/var/...와 같은 경로&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EC%82%B0%EC%9D%80-%EC%95%84%EB%A6%84%EB%8B%A4%EC%9A%B4-%ED%99%A9%EA%B8%88%EB%B9%9B-%EC%9D%BC%EB%AA%B0%EB%A1%9C-%EC%9C%A4%EA%B3%BD%EC%9D%84-%EA%B7%B8%EB%A6%BD%EB%8B%88%EB%8B%A4-JBIIMCEwROI?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@marekpiwnicki?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Marek Piwnicki&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>WEB/Spring</category>
      <category>@async + multipartfile</category>
      <category>byte[] to file</category>
      <category>java.nio.file.nosuchfileexception</category>
      <category>multipart tmp</category>
      <category>multipart to file</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/640</guid>
      <comments>https://seeminglyjs.tistory.com/640#entry640comment</comments>
      <pubDate>Tue, 1 Jul 2025 10:42:52 +0900</pubDate>
    </item>
    <item>
      <title>PostgreSQL PARTITION BY 와 ROW_NUMBER()</title>
      <link>https://seeminglyjs.tistory.com/639</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2025-06-21&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;marek-piwnicki-Z0I2iGp4Fw4-unsplash.jpg&quot; data-origin-width=&quot;5458&quot; data-origin-height=&quot;3411&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LvJUn/btsOLyUQgRx/5LGgBgqjL0wdRB2TtYiO3k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LvJUn/btsOLyUQgRx/5LGgBgqjL0wdRB2TtYiO3k/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Marek Piwnicki&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LvJUn/btsOLyUQgRx/5LGgBgqjL0wdRB2TtYiO3k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLvJUn%2FbtsOLyUQgRx%2F5LGgBgqjL0wdRB2TtYiO3k%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;533&quot; height=&quot;333&quot; data-filename=&quot;marek-piwnicki-Z0I2iGp4Fw4-unsplash.jpg&quot; data-origin-width=&quot;5458&quot; data-origin-height=&quot;3411&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Marek Piwnicki&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 기본 문법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;h2 data-end=&quot;522&quot; data-start=&quot;508&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1750480137491&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ROW_NUMBER() OVER (PARTITION BY 컬럼1 [, 컬럼2, ...] ORDER BY 정렬기준)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;707&quot; data-start=&quot;600&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;666&quot; data-start=&quot;600&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;PARTITION BY: 데이터를 그룹화할 기준 컬럼입니다. 이 컬럼 기준으로 각각 독립된 그룹처럼 계산됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;707&quot; data-start=&quot;667&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;ORDER BY: 각 그룹 내에서 순번을 매기는 정렬 기준입니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;725&quot; data-start=&quot;714&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. 예제&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-end=&quot;763&quot; data-start=&quot;727&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;다음은 직원들의 부서별 입사일 순으로 순위를 부여하는 예제입니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1750480171113&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE employees (
    id SERIAL PRIMARY KEY,
    name TEXT,
    department TEXT,
    hired_date DATE
);

INSERT INTO employees (name, department, hired_date) VALUES
('철수', '개발팀', '2020-01-01'),
('영희', '개발팀', '2021-01-01'),
('민수', '디자인팀', '2019-03-01'),
('수지', '디자인팀', '2020-06-01'),
('준호', '개발팀', '2019-07-01');&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;pre id=&quot;code_1750480179991&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT 
    id,
    name,
    department,
    hired_date,
    ROW_NUMBER() OVER (PARTITION BY department ORDER BY hired_date) AS rank_in_department
FROM 
    employees;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;1329&quot; data-start=&quot;1323&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;3. 결과&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 143px;&quot; border=&quot;1&quot; data-end=&quot;1736&quot; data-start=&quot;1331&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;ID&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;NAME&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;DEPARTMENT&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;HIRED_DATE&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;RANK_IN_DEPARTMENT&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;1510&quot; data-start=&quot;1454&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1459&quot; data-start=&quot;1454&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;5&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-end=&quot;1464&quot; data-start=&quot;1459&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;준호&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-end=&quot;1474&quot; data-start=&quot;1464&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;개발팀&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-end=&quot;1487&quot; data-start=&quot;1474&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2019-07-01&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-end=&quot;1510&quot; data-start=&quot;1487&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;1567&quot; data-start=&quot;1511&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1516&quot; data-start=&quot;1511&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-end=&quot;1521&quot; data-start=&quot;1516&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;철수&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-end=&quot;1531&quot; data-start=&quot;1521&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;개발팀&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-end=&quot;1544&quot; data-start=&quot;1531&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2020-01-01&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-end=&quot;1567&quot; data-start=&quot;1544&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;1624&quot; data-start=&quot;1568&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1573&quot; data-start=&quot;1568&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-end=&quot;1578&quot; data-start=&quot;1573&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;영희&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-end=&quot;1588&quot; data-start=&quot;1578&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;개발팀&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-end=&quot;1601&quot; data-start=&quot;1588&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2021-01-01&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-end=&quot;1624&quot; data-start=&quot;1601&quot; data-col-size=&quot;sm&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;3&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;1680&quot; data-start=&quot;1625&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1630&quot; data-start=&quot;1625&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;3&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1635&quot; data-start=&quot;1630&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;민수&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1644&quot; data-start=&quot;1635&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;디자인팀&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1657&quot; data-start=&quot;1644&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2019-03-01&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1680&quot; data-start=&quot;1657&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;1736&quot; data-start=&quot;1681&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1686&quot; data-start=&quot;1681&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;4&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1691&quot; data-start=&quot;1686&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;수지&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1700&quot; data-start=&quot;1691&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;디자인팀&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1713&quot; data-start=&quot;1700&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2020-06-01&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1736&quot; data-start=&quot;1713&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2079&quot; data-start=&quot;2045&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;각 customer_id 별로 주문 날짜 내림차순 정렬&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2113&quot; data-start=&quot;2080&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;ROW_NUMBER()를 사용하여 1번(최신)만 추출&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;2131&quot; data-start=&quot;2120&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;4. 주의 사항&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2290&quot; data-start=&quot;2133&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2191&quot; data-start=&quot;2133&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;ROW_NUMBER()는 같은 값이 있어도 &lt;b&gt;순번이 강제로 다르게 부여&lt;/b&gt;됩니다. (동점 없음)&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2242&quot; data-start=&quot;2192&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;동점 순위 처리를 원하면 RANK() 또는 DENSE_RANK()를 사용하세요.&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2290&quot; data-start=&quot;2243&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;PARTITION BY가 없는 경우 전체 테이블을 하나의 그룹으로 간주합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-end=&quot;2304&quot; data-start=&quot;2297&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;5. 정리&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;함수특징&lt;/span&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;2616&quot; data-start=&quot;2306&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;2616&quot; data-start=&quot;2440&quot;&gt;
&lt;tr data-end=&quot;2501&quot; data-start=&quot;2440&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2457&quot; data-start=&quot;2440&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;ROW_NUMBER()&lt;/span&gt;&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2501&quot; data-start=&quot;2457&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;순서대로 1,2,3,&amp;hellip; 부여 (동점 없음)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2557&quot; data-start=&quot;2502&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2519&quot; data-start=&quot;2502&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;RANK()&lt;/span&gt;&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2557&quot; data-start=&quot;2519&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;동점 있을 경우 같은 순위, 다음 순위 건너뜀&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2616&quot; data-start=&quot;2558&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2575&quot; data-start=&quot;2558&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;DENSE_RANK()&lt;/span&gt;&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2616&quot; data-start=&quot;2575&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;동점 있어도 순위 건너뛰지 않음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EB%88%88-%EB%8D%AE%EC%9D%B8-%EC%82%B0%EC%9D%B4-%ED%96%87%EB%B9%9B%EC%97%90-%EB%B9%84%EC%B6%B0%EC%A7%91%EB%8B%88%EB%8B%A4-Z0I2iGp4Fw4?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@marekpiwnicki?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Marek Piwnicki&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;</description>
      <category>DataBase/Postgre-SQL</category>
      <category>postgresql</category>
      <category>postgresql partition by</category>
      <category>ROW_NUMBER()</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/639</guid>
      <comments>https://seeminglyjs.tistory.com/639#entry639comment</comments>
      <pubDate>Mon, 23 Jun 2025 14:34:37 +0900</pubDate>
    </item>
    <item>
      <title>맥 시스템 용량 제거 방법</title>
      <link>https://seeminglyjs.tistory.com/638</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2025-05-27&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;laura-UfuQMuN1veM-unsplash.jpg&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;3090&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/belRK8/btsOb84wtNd/ffv5aet1WqD8Br3VYRhz4K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/belRK8/btsOb84wtNd/ffv5aet1WqD8Br3VYRhz4K/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Laura&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/belRK8/btsOb84wtNd/ffv5aet1WqD8Br3VYRhz4K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbelRK8%2FbtsOb84wtNd%2Fffv5aet1WqD8Br3VYRhz4K%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;356&quot; height=&quot;537&quot; data-filename=&quot;laura-UfuQMuN1veM-unsplash.jpg&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;3090&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Laura&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 터미널 명령어 사용&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;아래 명령어는 현재 위치에서 용량을 내림차순 해서 보여 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1748310209389&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo du -s -h * 2&amp;gt;/dev/null | sort -h&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;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;그럼 결과가 아래와 같은 형식으로 나옵니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1748310266326&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;0       some_small_file.txt
4.0K    empty_folder
12K     logs
5.0M    documents
23M     images
1.2G    videos&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. 나의 케이스&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;com.apple.mediaanalysisd는 macOS의 사진(Photos) 라는 디렉토리의 위치의 캐시에 엄청난 용량을 가지고 있어 해당 부분을 제거 하였다. 아래는 참고용이니 같은 케이스인 경우 활용 하면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1748310407417&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;rm -rf /Users/[유저명]/Library/Containers/com.apple.mediaanalysisd/Data/Library/Caches/com.apple.mediaanalysisd/*&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%ED%99%94%EB%A0%A4%ED%95%9C-%EC%B2%9C%EC%9E%A5-%EA%B7%B8%EB%A6%BC%EC%9D%B4%EC%9E%88%EB%8A%94-%EA%B5%90%ED%9A%8C-%EB%82%B4%EB%B6%80-UfuQMuN1veM?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@lauraemma_d?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Laura&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>OS/Mac</category>
      <category>com.apple.mediaanalysisd</category>
      <category>맥북 시스템 용량 정리</category>
      <category>맥북 용량 제거</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/638</guid>
      <comments>https://seeminglyjs.tistory.com/638#entry638comment</comments>
      <pubDate>Tue, 27 May 2025 10:48:21 +0900</pubDate>
    </item>
    <item>
      <title>intelliJ 윈도우에서 콘솔 컬러 하얀색으로만 나올때 [log4j2 사용시]</title>
      <link>https://seeminglyjs.tistory.com/637</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2025-03-18&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;tolga-ahmetler-kTZHJT7OO-I-unsplash.jpg&quot; data-origin-width=&quot;4409&quot; data-origin-height=&quot;6613&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVwHJO/btsMMgv4tA2/1gBYfqAvpIMiKQJSiassKk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVwHJO/btsMMgv4tA2/1gBYfqAvpIMiKQJSiassKk/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Tolga Ahmetler&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVwHJO/btsMMgv4tA2/1gBYfqAvpIMiKQJSiassKk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVwHJO%2FbtsMMgv4tA2%2F1gBYfqAvpIMiKQJSiassKk%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;360&quot; height=&quot;540&quot; data-filename=&quot;tolga-ahmetler-kTZHJT7OO-I-unsplash.jpg&quot; data-origin-width=&quot;4409&quot; data-origin-height=&quot;6613&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Tolga Ahmetler&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;기본적으로 log4j2.xml에서 PatternLayout을 사용하여 로그의 색상을 지정할 수 있습니다. 하지만 일부 버전(특히 2.10.0 이상)에서는 ANSI 색상이 기본적으로 비활성화되어 있어, 설정이 적용되지 않고 단순한 흰색 텍스트만 출력되는 문제가 발생할 수 있습니다.&lt;/span&gt;&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-pm-slice=&quot;3 3 []&quot; data-spread=&quot;true&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;PatternLayout에 disableAnsi=&quot;false&quot; 옵션을 추가합니다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-spread=&quot;false&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;일부 버전에서는 disableAnsi 기본값이 true로 설정되어 있어 ANSI 색상이 적용되지 않습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;따라서, disableAnsi=&quot;false&quot;를 명시적으로 추가하면 색상이 정상적으로 표시됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote data-pm-slice=&quot;1 1 []&quot; data-ke-style=&quot;style2&quot;&gt;Log4j2 설정 파일 (log4j2.xml) 참고&lt;/blockquote&gt;
&lt;pre id=&quot;code_1742260987712&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;Configuration status=&quot;WARN&quot;&amp;gt;
    &amp;lt;Appenders&amp;gt;
        &amp;lt;Console name=&quot;CONSOLE&quot; target=&quot;SYSTEM_OUT&quot;&amp;gt;
            &amp;lt;PatternLayout pattern=&quot;%highlight{[%d] - %msg%n}{FATAL=red blink, ERROR=red, WARN=yellow bold, INFO=black, DEBUG=green bold, TRACE=blue}&quot; disableAnsi=&quot;false&quot;/&amp;gt;
        &amp;lt;/Console&amp;gt;
    &amp;lt;/Appenders&amp;gt;
    &amp;lt;Loggers&amp;gt;
        &amp;lt;Root level=&quot;ALL&quot;&amp;gt;
            &amp;lt;AppenderRef ref=&quot;CONSOLE&quot;/&amp;gt;
        &amp;lt;/Root&amp;gt;
    &amp;lt;/Loggers&amp;gt;
&amp;lt;/Configuration&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;참고 :&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/48472049/how-to-colorize-log4j2-output-on-console-in-intellij&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://stackoverflow.com/questions/48472049/how-to-colorize-log4j2-output-on-console-in-intellij&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1742260874839&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;How to colorize Log4j2 output on console in intelliJ?&quot; data-og-description=&quot;I've tried to change the config file to like below but still, the output is plain white. How can I change it to any color? Like different color for each level. Code: import org.apache.log4j.*; p...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/48472049/how-to-colorize-log4j2-output-on-console-in-intellij&quot; data-og-url=&quot;https://stackoverflow.com/questions/48472049/how-to-colorize-log4j2-output-on-console-in-intellij&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/O7Hcv/hyYqSJSFuR/ffQGmbR22Z6N8xbpeMc3bK/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316,https://scrap.kakaocdn.net/dn/bOycBg/hyYqNIzc2K/YYgArE9DAiUSD2DZt7aWI0/img.png?width=1316&amp;amp;height=434&amp;amp;face=0_0_1316_434,https://scrap.kakaocdn.net/dn/cgFq4N/hyYrRjn4KV/EwYCsa3K19lzCQKoRIYCRk/img.jpg?width=475&amp;amp;height=256&amp;amp;face=0_0_475_256&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/48472049/how-to-colorize-log4j2-output-on-console-in-intellij&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/48472049/how-to-colorize-log4j2-output-on-console-in-intellij&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/O7Hcv/hyYqSJSFuR/ffQGmbR22Z6N8xbpeMc3bK/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316,https://scrap.kakaocdn.net/dn/bOycBg/hyYqNIzc2K/YYgArE9DAiUSD2DZt7aWI0/img.png?width=1316&amp;amp;height=434&amp;amp;face=0_0_1316_434,https://scrap.kakaocdn.net/dn/cgFq4N/hyYrRjn4KV/EwYCsa3K19lzCQKoRIYCRk/img.jpg?width=475&amp;amp;height=256&amp;amp;face=0_0_475_256');&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;How to colorize Log4j2 output on console in intelliJ?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I've tried to change the config file to like below but still, the output is plain white. How can I change it to any color? Like different color for each level. Code: import org.apache.log4j.*; p...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EB%A9%80%EB%A6%AC-%EB%8F%9B%EB%8B%A8%EB%B0%B0%EC%99%80-%ED%95%A8%EA%BB%98-%EB%B0%94%EB%8B%A4-%EC%9C%84%EB%A1%9C-%ED%95%B4%EA%B0%80-%EC%A7%80%EA%B3%A0-%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4-kTZHJT7OO-I?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@t_ahmetler?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Tolga Ahmetler&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;</description>
      <category>Tool/Intellij</category>
      <category>intellij console 컬러</category>
      <category>log4j2</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/637</guid>
      <comments>https://seeminglyjs.tistory.com/637#entry637comment</comments>
      <pubDate>Tue, 18 Mar 2025 10:25:25 +0900</pubDate>
    </item>
    <item>
      <title>firebase_database: Lexical or Preprocessor Issue (Xcode): Include of non-modular header inside framework module 해결 방법</title>
      <link>https://seeminglyjs.tistory.com/636</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2025-02-20&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;josh-hild-xLQM7Tnqdpg-unsplash.jpg&quot; data-origin-width=&quot;3586&quot; data-origin-height=&quot;4482&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Vh4Mt/btsMqLIdYc1/Kikz4gJsZlpDC2Mj2FbrJ0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Vh4Mt/btsMqLIdYc1/Kikz4gJsZlpDC2Mj2FbrJ0/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Josh Hild&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Vh4Mt/btsMqLIdYc1/Kikz4gJsZlpDC2Mj2FbrJ0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVh4Mt%2FbtsMqLIdYc1%2FKikz4gJsZlpDC2Mj2FbrJ0%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;381&quot; height=&quot;476&quot; data-filename=&quot;josh-hild-xLQM7Tnqdpg-unsplash.jpg&quot; data-origin-width=&quot;3586&quot; data-origin-height=&quot;4482&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Josh Hild&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1740036504325&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Xcode =&amp;gt; Runner =&amp;gt; Build Settings and put &quot;Allow Non-modular Includes In Framework Modules&quot; to &quot;yes&quot;&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;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Xcode 상의 위의 위치로 이동해 아래 설정값을 Yes 로 바꿔주면 해결 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;623&quot; data-origin-height=&quot;82&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byxzi9/btsMqhnd4CJ/tOwFviDTPrvQgXnsEyswfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byxzi9/btsMqhnd4CJ/tOwFviDTPrvQgXnsEyswfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byxzi9/btsMqhnd4CJ/tOwFviDTPrvQgXnsEyswfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbyxzi9%2FbtsMqhnd4CJ%2FtOwFviDTPrvQgXnsEyswfK%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;623&quot; height=&quot;82&quot; data-origin-width=&quot;623&quot; data-origin-height=&quot;82&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EB%AC%BC-%EC%9C%84%EC%97%90%EC%84%9C-%EB%B0%94%EB%9D%BC%EB%B3%B8-%EB%8F%84%EC%8B%9C%EC%9D%98-%EB%AA%A8%EC%8A%B5-xLQM7Tnqdpg?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@joshhild?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Josh Hild&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>App/IOS</category>
      <category>firebase_database: lexical or preprocessor issue (xcode): include of non-modular header inside framework module</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/636</guid>
      <comments>https://seeminglyjs.tistory.com/636#entry636comment</comments>
      <pubDate>Thu, 20 Feb 2025 16:30:54 +0900</pubDate>
    </item>
    <item>
      <title>Postgre sql 시퀀스 값을 수동으로 수정 방법 (auto increment 충돌 방지)</title>
      <link>https://seeminglyjs.tistory.com/635</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2025-02-17&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;vadim-sadovski-3XMMBl5W4C4-unsplash.jpg&quot; data-origin-width=&quot;2703&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cK0FUX/btsMk1L4z9b/p5T1AR9qBEE7n8lbXwuUf1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cK0FUX/btsMk1L4z9b/p5T1AR9qBEE7n8lbXwuUf1/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Vadim Sadovski&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cK0FUX/btsMk1L4z9b/p5T1AR9qBEE7n8lbXwuUf1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcK0FUX%2FbtsMk1L4z9b%2Fp5T1AR9qBEE7n8lbXwuUf1%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;292&quot; height=&quot;432&quot; data-filename=&quot;vadim-sadovski-3XMMBl5W4C4-unsplash.jpg&quot; data-origin-width=&quot;2703&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Vadim Sadovski&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739771977104&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//기본키 설정된 시퀀스 명확인
SELECT pg_get_serial_sequence('test_schema.tb_test', 'test_id');

//시퀀스 현재 테이블에서 사용중인 맥스값으로 변경
SELECT setval(
    'test_schema.tb_test_test_id_seq',
    (SELECT COALESCE(MAX(test_id), 1) FROM test_schema.tb_test)
);

// 시퀀스 맥스값 확인
SELECT last_value FROM test_schema.tb_test_test_id_seq;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EB%B0%A4%EC%97%90-%EB%B6%88%EC%9D%84-%EB%B0%9D%ED%9E%8C-%EC%BB%B4%ED%93%A8%ED%84%B0-%EC%BC%80%EC%9D%B4%EC%8A%A4-%EB%82%B4%EB%B6%80-3XMMBl5W4C4?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@vadimsadovski?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Vadim Sadovski&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>DataBase/Postgre-SQL</category>
      <category>pg_get_serial_sequence</category>
      <category>select last_value from</category>
      <category>기본키 충돌</category>
      <category>시퀀스 수동 변경</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/635</guid>
      <comments>https://seeminglyjs.tistory.com/635#entry635comment</comments>
      <pubDate>Mon, 17 Feb 2025 15:02:17 +0900</pubDate>
    </item>
    <item>
      <title>postgrsql earth_distance 설치 방법</title>
      <link>https://seeminglyjs.tistory.com/634</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2025-02-10&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;daniel-boberg-6PLyWqb-qGI-unsplash.jpg&quot; data-origin-width=&quot;2800&quot; data-origin-height=&quot;2097&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgVZUs/btsMc1E8Tdo/7UKrl7HY0idK22mZM2j6wK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgVZUs/btsMc1E8Tdo/7UKrl7HY0idK22mZM2j6wK/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Daniel Boberg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgVZUs/btsMc1E8Tdo/7UKrl7HY0idK22mZM2j6wK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgVZUs%2FbtsMc1E8Tdo%2F7UKrl7HY0idK22mZM2j6wK%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;537&quot; height=&quot;402&quot; data-filename=&quot;daniel-boberg-6PLyWqb-qGI-unsplash.jpg&quot; data-origin-width=&quot;2800&quot; data-origin-height=&quot;2097&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Daniel Boberg&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1.&amp;nbsp; 확장 프로그램 설치&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739168086551&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 15버전일 경우 아래 다른 버전일 경우 해당 숫자만 변경
yum install postgresql15-contrib&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. earth_distance 확장&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;# earth_distance 관련 라이브러리를 사용해야 하는 DB -&amp;gt; 스키마로 이동한 이후에 아래 명령어 사용&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739168187651&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;create extension if not exists cube;
create extension if not exists earthdistance;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EB%82%98%EB%AC%B4%EC%9D%98-%ED%9D%91%EB%B0%B1-%EC%82%AC%EC%A7%84-6PLyWqb-qGI?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@dbbrg?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Daniel Boberg&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>DataBase/Postgre-SQL</category>
      <category>earth_distance</category>
      <category>extension &amp;quot;cube&amp;quot; is not available detail: could not open extension control file &amp;quot;/usr/share/pgsql/extension/cube.control&amp;quot;: no such file</category>
      <category>postgresql</category>
      <category>postgresql cube</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/634</guid>
      <comments>https://seeminglyjs.tistory.com/634#entry634comment</comments>
      <pubDate>Mon, 10 Feb 2025 15:18:37 +0900</pubDate>
    </item>
    <item>
      <title>s3 폴더 하위 객체 메타데이터 한번에 변경하는 방법</title>
      <link>https://seeminglyjs.tistory.com/633</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-12-23&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;jez-timms-ck8ElD0DCbk-unsplash.jpg&quot; data-origin-width=&quot;5504&quot; data-origin-height=&quot;8256&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WQEqT/btsLuLCknkL/twGI727qYSMDcET54Y2Tok/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WQEqT/btsLuLCknkL/twGI727qYSMDcET54Y2Tok/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Jez Timms&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WQEqT/btsLuLCknkL/twGI727qYSMDcET54Y2Tok/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWQEqT%2FbtsLuLCknkL%2FtwGI727qYSMDcET54Y2Tok%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;467&quot; height=&quot;701&quot; data-filename=&quot;jez-timms-ck8ElD0DCbk-unsplash.jpg&quot; data-origin-width=&quot;5504&quot; data-origin-height=&quot;8256&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Jez Timms&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;1. 명령어&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;S3 폴더의 하위 객체들의 메타데이터를 한 번에 수정하려면 --recursive 옵션을 사용하여 cp 명령어로 전체 폴더를 처리할 수 있습니다. 새 메타데이터를 적용하려면 --metadata-directive REPLACE를 설정해야 하며, 변경하려는 메타데이터와 함께 명령어를 실행하면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1734940475133&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;aws s3 cp s3://test/images/imagesub/data/ s3://test/images/imagesub/data/ \
    --recursive \
    --metadata-directive REPLACE \
    --cache-control &quot;max-age=31536000, must-revalidate&quot; \
    --content-type &quot;image/png&quot;&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EC%B1%85%EC%9E%A5%EC%9D%B4-%EC%9E%88%EB%8A%94-%EB%B0%A9%EC%97%90-%EC%9E%88%EB%8A%94-%EC%9E%91%EC%9D%80-%ED%81%AC%EB%A6%AC%EC%8A%A4%EB%A7%88%EC%8A%A4-%ED%8A%B8%EB%A6%AC-ck8ElD0DCbk?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@jeztimms?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Jez Timms&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>AWS/S3</category>
      <category>s3 metadata 변경</category>
      <category>s3 객체 정보 수정</category>
      <category>s3 메타데이터 수정</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/633</guid>
      <comments>https://seeminglyjs.tistory.com/633#entry633comment</comments>
      <pubDate>Mon, 23 Dec 2024 16:59:37 +0900</pubDate>
    </item>
    <item>
      <title>postgreSQL bigint vs int(8) 차이점</title>
      <link>https://seeminglyjs.tistory.com/632</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-12-11&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;steve-johnson-D7AuHpLxLPA-unsplash.jpg&quot; data-origin-width=&quot;7680&quot; data-origin-height=&quot;4320&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BXe2z/btsLe0fYSGn/UDiJuZ6hWOEkxYAwXaLCCK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BXe2z/btsLe0fYSGn/UDiJuZ6hWOEkxYAwXaLCCK/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Steve Johnson&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BXe2z/btsLe0fYSGn/UDiJuZ6hWOEkxYAwXaLCCK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBXe2z%2FbtsLe0fYSGn%2FUDiJuZ6hWOEkxYAwXaLCCK%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;7680&quot; height=&quot;4320&quot; data-filename=&quot;steve-johnson-D7AuHpLxLPA-unsplash.jpg&quot; data-origin-width=&quot;7680&quot; data-origin-height=&quot;4320&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Steve Johnson&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;테이블 생성&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1733897366950&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE t ( c1 bigint, c2 int8 );&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;여기서 c1은 BIGINT로 정의되고, c2는 INT8로 정의됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이 두 타입은 동일한 데이터 타입을 참조하기 때문에 PostgreSQL은 둘을 같은 것으로 처리합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;속성 조회&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1733897378508&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT a.attname, t.typname 
FROM pg_class AS c 
JOIN pg_attribute AS a ON a.attrelid = c.oid 
JOIN pg_type AS t ON a.atttypid = t.oid 
WHERE c.relname = 't' AND a.attname IN ('c1', 'c2') ORDER BY 1;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이 쿼리는 테이블 t의 각 컬럼 이름(attname)과 데이터 타입 이름(typname)을 가져옵니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;c1&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;int8&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;c2&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;int8&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;c1과 c2 모두 int8로 반환됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이는 BIGINT와 INT8이 동일한 데이터 타입을 나타낸다는 것을 보여줍니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;타입 정의 조회&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1733897454697&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM pg_type WHERE typname IN ('int8', 'bigint');&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;결과는 다음과 같습니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;int8&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;pg_type 시스템 카탈로그에는 typname으로 int8만 정의되어 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;PostgreSQL 내부적으로 BIGINT는 실제 데이터 타입이 아니라 INT8의 별칭으로 처리되므로, pg_type에 BIGINT라는 이름이 나타나지 않습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;PostgreSQL 내부 구조 이해&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;pg_type 카탈로그&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;pg_type은 PostgreSQL 데이터베이스의 데이터 타입 정의를 관리하는 시스템 카탈로그입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;BIGINT는 SQL 표준에 따라 사용자를 위해 정의된 이름이며, 내부적으로는 INT8로 매핑됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;데이터 타입 처리 흐름&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;테이블 생성 시 BIGINT는 SQL 구문으로 전달됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;PostgreSQL은 이를 INT8로 변환하여 pg_type에 저장합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;테이블 생성 후, 데이터 타입 정보는 항상 INT8로 나타납니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;실무적 의미&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;BIGINT와 INT8은 동일한 데이터 타입으로 취급되며, 두 이름을 혼용해도 동작에 차이가 없습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;PostgreSQL에서 BIGINT는 SQL 표준을 준수하려는 사용자 친화적 표현일 뿐, 내부적으로는 INT8로 동작합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;pg_type에서 BIGINT라는 이름을 찾을 수 없는 이유는 PostgreSQL이 이를 별칭(alias)로 처리하기 때문입니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;결론&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;BIGINT와 INT8은 PostgreSQL에서 동일한 데이터 타입입니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;pg_type 카탈로그에는 BIGINT가 별도로 저장되지 않으며, 모든 BIGINT 타입은 INT8로 저장됩니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;pg_type 쿼리 결과는 PostgreSQL의 데이터 타입 처리 방식을 올바르게 반영하고 있습니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이로 인해 성능이나 동작에는 차이가 없으며, BIGINT를 사용하는 것은 SQL 표준 준수와 가독성을 위한 선택일 뿐입니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;출처 : &lt;a href=&quot;https://stackoverflow.com/questions/68200397/whats-the-difference-between-bigint-and-int8-postgres&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://stackoverflow.com/questions/68200397/whats-the-difference-between-bigint-and-int8-postgres&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1733897521984&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;What's the difference between BIGINT and INT8? (postgres)&quot; data-og-description=&quot;I'm using a service called Supabase and I created a table: CREATE TABLE my_table ( &amp;quot;id&amp;quot; BIGSERIAL PRIMARY KEY NOT NULL, &amp;quot;title&amp;quot; Text COLLATE &amp;quot;pg_catalog&amp;quot;.&amp;quot;&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/68200397/whats-the-difference-between-bigint-and-int8-postgres&quot; data-og-url=&quot;https://stackoverflow.com/questions/68200397/whats-the-difference-between-bigint-and-int8-postgres&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/IbzBJ/hyXKohxdAR/7HkB4znhIsvblvY8kTJ3R1/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/68200397/whats-the-difference-between-bigint-and-int8-postgres&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/68200397/whats-the-difference-between-bigint-and-int8-postgres&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/IbzBJ/hyXKohxdAR/7HkB4znhIsvblvY8kTJ3R1/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&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;What's the difference between BIGINT and INT8? (postgres)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I'm using a service called Supabase and I created a table: CREATE TABLE my_table ( &quot;id&quot; BIGSERIAL PRIMARY KEY NOT NULL, &quot;title&quot; Text COLLATE &quot;pg_catalog&quot;.&quot;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EB%AC%B4%EB%8A%AC%EA%B0%80-%EC%9E%88%EB%8A%94-%ED%8C%8C%EB%9E%80%EC%83%89%EA%B3%BC-%ED%9D%B0%EC%83%89-%EB%B2%BD-D7AuHpLxLPA?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@steve_j?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Steve Johnson&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>DataBase/Postgre-SQL</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/632</guid>
      <comments>https://seeminglyjs.tistory.com/632#entry632comment</comments>
      <pubDate>Wed, 11 Dec 2024 15:14:18 +0900</pubDate>
    </item>
    <item>
      <title>Xcode 기존 Archive 위치</title>
      <link>https://seeminglyjs.tistory.com/631</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-11-21&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;andrei-r-popescu-FmOPaefLRA0-unsplash.jpg&quot; data-origin-width=&quot;6000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6MdxF/btsKPInsVEi/OKbfMErKqOMrvWHDTJPtlK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6MdxF/btsKPInsVEi/OKbfMErKqOMrvWHDTJPtlK/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Andrei R. Popescu&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6MdxF/btsKPInsVEi/OKbfMErKqOMrvWHDTJPtlK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6MdxF%2FbtsKPInsVEi%2FOKbfMErKqOMrvWHDTJPtlK%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;558&quot; height=&quot;372&quot; data-filename=&quot;andrei-r-popescu-FmOPaefLRA0-unsplash.jpg&quot; data-origin-width=&quot;6000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Andrei R. Popescu&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0c0d0e; text-align: left; font-family: 'Noto Serif KR';&quot;&gt;Window &amp;gt; Organizer &amp;gt; Products &amp;gt; Archives&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2485&quot; data-origin-height=&quot;1664&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rNvfH/btsKQ77kRhy/Gxkaj2kZRxpOGEeKSKa6TK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rNvfH/btsKQ77kRhy/Gxkaj2kZRxpOGEeKSKa6TK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rNvfH/btsKQ77kRhy/Gxkaj2kZRxpOGEeKSKa6TK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrNvfH%2FbtsKQ77kRhy%2FGxkaj2kZRxpOGEeKSKa6TK%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;2485&quot; height=&quot;1664&quot; data-origin-width=&quot;2485&quot; data-origin-height=&quot;1664&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;참고 링크&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/7377162/xcode-but-where-are-our-archives&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://stackoverflow.com/questions/7377162/xcode-but-where-are-our-archives&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1732154571281&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;Xcode - But... Where are our archives?&quot; data-og-description=&quot;I've submitted three versions of my app onto the App Store using the Build and Archive commands. But... Where are those archives? I've just learnt that I just need them to be able to read crashl...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/7377162/xcode-but-where-are-our-archives&quot; data-og-url=&quot;https://stackoverflow.com/questions/7377162/xcode-but-where-are-our-archives&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/zp0y5/hyXzLxRpCX/kpXKi8H9ox1XtlsCQ4ucfK/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316,https://scrap.kakaocdn.net/dn/tJZRo/hyXzKFHKnU/M21Wu2XzakaCFfIQPxHka0/img.png?width=1672&amp;amp;height=674&amp;amp;face=0_0_1672_674,https://scrap.kakaocdn.net/dn/bTncv6/hyXzUO6XKY/gwlXXgBjvbGOpCfqw1AKik/img.png?width=1281&amp;amp;height=755&amp;amp;face=46_184_96_240&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/7377162/xcode-but-where-are-our-archives&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/7377162/xcode-but-where-are-our-archives&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/zp0y5/hyXzLxRpCX/kpXKi8H9ox1XtlsCQ4ucfK/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316,https://scrap.kakaocdn.net/dn/tJZRo/hyXzKFHKnU/M21Wu2XzakaCFfIQPxHka0/img.png?width=1672&amp;amp;height=674&amp;amp;face=0_0_1672_674,https://scrap.kakaocdn.net/dn/bTncv6/hyXzUO6XKY/gwlXXgBjvbGOpCfqw1AKik/img.png?width=1281&amp;amp;height=755&amp;amp;face=46_184_96_240');&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;Xcode - But... Where are our archives?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I've submitted three versions of my app onto the App Store using the Build and Archive commands. But... Where are those archives? I've just learnt that I just need them to be able to read crashl...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EC%82%B0%EC%9D%84-%EB%B0%B0%EA%B2%BD%EC%9C%BC%EB%A1%9C-%ED%95%9C-%EB%93%A4%ED%8C%90-%ED%95%9C%EA%B0%80%EC%9A%B4%EB%8D%B0%EC%97%90-%EC%9E%88%EB%8A%94-%EA%B5%90%ED%9A%8C-FmOPaefLRA0?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@androwv?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Andrei R. Popescu&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>App/IOS</category>
      <category>archive organizer</category>
      <category>xcode archive 위치</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/631</guid>
      <comments>https://seeminglyjs.tistory.com/631#entry631comment</comments>
      <pubDate>Thu, 21 Nov 2024 11:04:07 +0900</pubDate>
    </item>
    <item>
      <title>Try / Catch 없이 inpustStream close() 호출 방법</title>
      <link>https://seeminglyjs.tistory.com/630</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-11-20&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;brandon-griggs-Y0hP6rzN3Cs-unsplash.jpg&quot; data-origin-width=&quot;4160&quot; data-origin-height=&quot;6240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwjsHd/btsKQbWfVOz/yMPyKyI74CAfKndaTKIyaK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwjsHd/btsKQbWfVOz/yMPyKyI74CAfKndaTKIyaK/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Brandon Griggs&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwjsHd/btsKQbWfVOz/yMPyKyI74CAfKndaTKIyaK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwjsHd%2FbtsKQbWfVOz%2FyMPyKyI74CAfKndaTKIyaK%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;389&quot; height=&quot;584&quot; data-filename=&quot;brandon-griggs-Y0hP6rzN3Cs-unsplash.jpg&quot; data-origin-width=&quot;4160&quot; data-origin-height=&quot;6240&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Brandon Griggs&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1732079619033&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import com.amazonaws.util.IOUtils;


    public void fileToInputStream(File file) {
        FileInputStream fileInputStream = null;
        try {
            fileInputStream = new FileInputStream(file);
			// ...
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }finally {
            if(fileInputStream != null){//스트림 객체 안전하게 제거
                IOUtils.closeQuietly(fileInputStream, null);
            }
        }
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;참고 링크 : &lt;a href=&quot;https://stackoverflow.com/questions/36840545/closing-inputstream-without-a-try-catch-block&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://stackoverflow.com/questions/36840545/closing-inputstream-without-a-try-catch-block&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1732079778505&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;Closing InputStream without a try/catch block?&quot; data-og-description=&quot;I know that an InputStream should be closed. But I have some doubts where and how to do this. According to the documentation on IOUtils.closeQuietly: Unconditionally close an InputStream. Equiv...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/36840545/closing-inputstream-without-a-try-catch-block&quot; data-og-url=&quot;https://stackoverflow.com/questions/36840545/closing-inputstream-without-a-try-catch-block&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b4TYcy/hyXDgiveNU/85B3HclNJOnECTBbM25s31/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/36840545/closing-inputstream-without-a-try-catch-block&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/36840545/closing-inputstream-without-a-try-catch-block&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b4TYcy/hyXDgiveNU/85B3HclNJOnECTBbM25s31/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&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;Closing InputStream without a try/catch block?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I know that an InputStream should be closed. But I have some doubts where and how to do this. According to the documentation on IOUtils.closeQuietly: Unconditionally close an InputStream. Equiv...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EB%B0%A4%EC%97%90-%EA%B4%80%EB%9E%8C%EC%B0%A8%EC%9D%98-%ED%9D%90%EB%A6%BF%ED%95%9C-%EC%82%AC%EC%A7%84-Y0hP6rzN3Cs?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@paralitik?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Brandon Griggs&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Language/Java</category>
      <category>fileinputstream close</category>
      <category>inputstream close</category>
      <category>try catch 없이</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/630</guid>
      <comments>https://seeminglyjs.tistory.com/630#entry630comment</comments>
      <pubDate>Wed, 20 Nov 2024 14:18:10 +0900</pubDate>
    </item>
    <item>
      <title>Error: Method not found: 'UnmodifiableUint8ListView'.UnmodifiableUint8ListView(Uint8List(0)); 해결 방법</title>
      <link>https://seeminglyjs.tistory.com/629</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-11-04&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;mathias-reding-ZLrshX3q6Rk-unsplash.jpg&quot; data-origin-width=&quot;4672&quot; data-origin-height=&quot;7008&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/99oTy/btsKvadCFrH/7wMDy5fif5y2LfW6O9rClK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/99oTy/btsKvadCFrH/7wMDy5fif5y2LfW6O9rClK/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Mathias Reding&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/99oTy/btsKvadCFrH/7wMDy5fif5y2LfW6O9rClK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F99oTy%2FbtsKvadCFrH%2F7wMDy5fif5y2LfW6O9rClK%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;326&quot; height=&quot;489&quot; data-filename=&quot;mathias-reding-ZLrshX3q6Rk-unsplash.jpg&quot; data-origin-width=&quot;4672&quot; data-origin-height=&quot;7008&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Mathias Reding&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1.&amp;nbsp; 해결 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;자신의 프로젝트 경로로 이동 후 아래 명령어 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1730713791396&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;- flutter pub cache clean
- flutter channel stable 
- flutter pub get 

위에 명령어로 안될 경우 아래 명령어 다시 실행

- flutter pub cache clean
- flutter pub get
- flutter pub upgrade&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. Error:&amp;nbsp;CocoaPods's&amp;nbsp;specs&amp;nbsp;repository&amp;nbsp;is&amp;nbsp;too&amp;nbsp;out-of-date&amp;nbsp;to&amp;nbsp;satisfy&amp;nbsp;dependencies.&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;실행해보고 위에 에러 추가 발생시 아래 순서 대로 실행&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1730714033652&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1. 자신의 프로젝트 /ios 폴더에서 Podfile.lock 파일을 제거
2. 터미널에서 자신의 프로젝트 ios 폴더로 이동 후 아래 명령어 실행
3. pod install --repo-update
4. 터미널에서 다시 다시 자신의 프로젝트 경로로 이동 후 아래 명령어 순서대로 실행
5. flutter clean
6. flutter run&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;span style=&quot;background-color: #ffffff; color: #f89009; text-align: left; font-family: 'Noto Serif KR';&quot;&gt;* 주의 사항 flutter run 대신에 start debugging 으로 실행하면 에러 해결 안됨&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;참고 링크 : &lt;a href=&quot;https://github.com/jonataslaw/get_cli/issues/263#issue-2365926859&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/jonataslaw/get_cli/issues/263#issue-2365926859&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1730713723195&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;build issue in dart 3.5.0 - UnmodifiableUint8ListView &amp;middot; Issue #263 &amp;middot; jonataslaw/get_cli&quot; data-og-description=&quot;Building package executables... (5.4s) Failed to build get_cli:get: ../../../.pub-cache/hosted/pub.dev/win32-5.3.0/lib/src/guid.dart:32:9: Error: Type 'UnmodifiableUint8ListView' not found. final U...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/jonataslaw/get_cli/issues/263#issue-2365926859&quot; data-og-url=&quot;https://github.com/jonataslaw/get_cli/issues/263&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cBKk94/hyXs1GJcpK/DpPizX2fQYsvNh3l4KnrKk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/Gk5e7/hyXs0gKeaP/b2ol5XY9fOhwE8r1VsCUwk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/jonataslaw/get_cli/issues/263#issue-2365926859&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/jonataslaw/get_cli/issues/263#issue-2365926859&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cBKk94/hyXs1GJcpK/DpPizX2fQYsvNh3l4KnrKk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/Gk5e7/hyXs0gKeaP/b2ol5XY9fOhwE8r1VsCUwk/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;build issue in dart 3.5.0 - UnmodifiableUint8ListView &amp;middot; Issue #263 &amp;middot; jonataslaw/get_cli&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Building package executables... (5.4s) Failed to build get_cli:get: ../../../.pub-cache/hosted/pub.dev/win32-5.3.0/lib/src/guid.dart:32:9: Error: Type 'UnmodifiableUint8ListView' not found. final U...&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;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%ED%9D%B0%EC%83%89-%EC%9E%90%EB%8F%99%EC%B0%A8%EC%9D%98-%EA%BC%AC%EB%A6%AC-%EB%81%9D-%EB%B6%80%EB%B6%84-%ED%81%B4%EB%A1%9C%EC%A6%88%EC%97%85-ZLrshX3q6Rk?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@matreding?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Mathias Reding&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>App/Flutter</category>
      <category>error: cocoapods's specs repository is too out-of-date to satisfy dependencies.</category>
      <category>error: method not found: 'unmodifiableuint8listview'.unmodifiableuint8listview(uint8list(0));</category>
      <category>Flutter</category>
      <category>flutter clean</category>
      <category>flutter pub cache clean</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/629</guid>
      <comments>https://seeminglyjs.tistory.com/629#entry629comment</comments>
      <pubDate>Mon, 4 Nov 2024 18:56:35 +0900</pubDate>
    </item>
    <item>
      <title>타임리프(Thymeleaf)에서 프래그먼트에 자바스크립트 함수 전달하기</title>
      <link>https://seeminglyjs.tistory.com/628</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-07-15&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;mehdi-el-marouazi-LIHbCBpGzjc-unsplash.jpg&quot; data-origin-width=&quot;4160&quot; data-origin-height=&quot;6240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/borBVL/btsIy0CXbip/fdl43hz3EvF4cqmCksgfp1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/borBVL/btsIy0CXbip/fdl43hz3EvF4cqmCksgfp1/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Mehdi El marouazi&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/borBVL/btsIy0CXbip/fdl43hz3EvF4cqmCksgfp1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FborBVL%2FbtsIy0CXbip%2Ffdl43hz3EvF4cqmCksgfp1%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;267&quot; height=&quot;401&quot; data-filename=&quot;mehdi-el-marouazi-LIHbCBpGzjc-unsplash.jpg&quot; data-origin-width=&quot;4160&quot; data-origin-height=&quot;6240&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Mehdi El marouazi&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;타임리프(Thymeleaf)는 서버 사이드 템플릿 엔진으로, HTML을 템플릿으로 사용하여 동적 웹 페이지를 생성하는 데 유용합니다. 때로는 자바스크립트 함수를 프래그먼트에 직접 전달해야 할 때가 있습니다. 이 글에서는 타임리프에서 프래그먼트에 자바스크립트 함수를 전달하는 방법을 설명합니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 프래그먼트 정의하기&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;먼저, 자바스크립트 함수를 호출할 수 있도록 프래그먼트를 정의합니다. 프래그먼트는 th:fragment 속성을 사용하여 정의할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1720937498347&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div th:fragment=&quot;accordion_enable(subTitle, timeTxt, subTitleColor, timeTxtShow, btnShow, btnShowText, btnFunction)&quot;&amp;gt;
    &amp;lt;div class=&quot;accordion_list&quot;&amp;gt;
        &amp;lt;div class=&quot;accordion_txt sub_title_sm&quot; th:text=&quot;${subTitle}&quot; th:style=&quot;'color:'+ ${subTitleColor} +';'&quot;&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;accordion_time_txt&quot; th:if=&quot;${timeTxtShow}&quot; th:text=&quot;${timeTxt}&quot;&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;button th:if=&quot;${btnShow}&quot; th:text=&quot;${btnShowText}&quot; th:onclick=&quot;${btnFunction}&quot;&amp;gt;&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. 프래그먼트 호출하기&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;타임리프 문법을 사용하여 프래그먼트를 호출할 때, 자바스크립트 함수와 매개변수를 문자열로 전달합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1720937518423&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;accordion_list&quot; 
    th:replace=&quot;~{${'component/accordion/accordion_enable.html'} :: accordion_enable(
        subTitle=${'subTitle'},
        timeTxt=${'timeTxt'},
        subTitleColor=${'red'},
        timeTxtShow=${true},
        btnShow=${true},
        btnShowText=${'btnShowText'},
        btnFunction=${'btnFncTest(' + ${1} + ')'}
    )}&quot;&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;3. 자바스크립트 함수 정의하기&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;마지막으로, 호출하려는 자바스크립트 함수를 정의합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1720937540602&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function btnFncTest(number){
    console.log(number);
    // 다른 로직 추가
}&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;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; 이와 같이, 타임리프에서 프래그먼트에 자바스크립트 함수를 전달하고, 해당 프래그먼트 내에서 이를 사용할 수 있습니다. 이 방법은 문자열을 적절하게 인코딩하여 HTML 속성에 할당하는 방식으로 처리되며, 동적인 웹 페이지를 생성하는 데 매우 유용합니다. &lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EB%AA%A8%EB%9E%98-%EC%9C%84%EC%97%90-%EC%84%9C-%EC%9E%88%EB%8A%94-%EB%82%99%ED%83%80-%EB%91%90-%EB%A7%88%EB%A6%AC-LIHbCBpGzjc?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@mehdi_el_marouazi?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Mehdi El marouazi&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;</description>
      <category>WEB/Thymeleaf</category>
      <category>thymeleaf</category>
      <category>thymeleaf fragment</category>
      <category>thymeleaf 파라미터</category>
      <category>타임리프</category>
      <category>타임리프 자바스크립트</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/628</guid>
      <comments>https://seeminglyjs.tistory.com/628#entry628comment</comments>
      <pubDate>Mon, 15 Jul 2024 10:18:51 +0900</pubDate>
    </item>
    <item>
      <title>반응형 GSAP 슬라이더와 버튼 웨이브 효과</title>
      <link>https://seeminglyjs.tistory.com/627</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-07-08&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1762&quot; data-origin-height=&quot;1710&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ql17y/btsIo6KGhyM/j6JzqlboyQ8WBvF6AztKn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ql17y/btsIo6KGhyM/j6JzqlboyQ8WBvF6AztKn1/img.png&quot; data-alt=&quot;https://codepen.io/yudizsolutions/pen/QWoqmWW&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ql17y/btsIo6KGhyM/j6JzqlboyQ8WBvF6AztKn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fql17y%2FbtsIo6KGhyM%2Fj6JzqlboyQ8WBvF6AztKn1%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;1762&quot; height=&quot;1710&quot; data-origin-width=&quot;1762&quot; data-origin-height=&quot;1710&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://codepen.io/yudizsolutions/pen/QWoqmWW&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;codepen&quot; style=&quot;height: 965.86328125px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot; data-height=&quot;965.86328125&quot; data-default-tab=&quot;html,result&quot; data-slug-hash=&quot;QWoqmWW&quot; data-pen-title=&quot;Responsive GSAP Slider with Button Wave Effect&quot; data-user=&quot;yudizsolutions&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/yudizsolutions/pen/QWoqmWW&quot;&gt; Responsive GSAP Slider with Button Wave Effect&lt;/a&gt; by Yudiz Solutions Limited (&lt;a href=&quot;https://codepen.io/yudizsolutions&quot;&gt;@yudizsolutions&lt;/a&gt;) on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;script src=&quot;https://cpwebassets.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : &lt;a href=&quot;https://codepen.io/yudizsolutions/pen/QWoqmWW&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://codepen.io/yudizsolutions/pen/QWoqmWW&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>CodePen/캐러셀</category>
      <category>gsap</category>
      <category>html 슬라이드</category>
      <category>html 캐러셀</category>
      <category>반응형 gsap 슬라이더와 버튼 웨이브 효과</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/627</guid>
      <comments>https://seeminglyjs.tistory.com/627#entry627comment</comments>
      <pubDate>Mon, 8 Jul 2024 09:18:23 +0900</pubDate>
    </item>
    <item>
      <title>백그라운드 강조 효과가 있는 캐러셀을 만드는 방법</title>
      <link>https://seeminglyjs.tistory.com/626</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-07-05&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2152&quot; data-origin-height=&quot;1380&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0p6Gx/btsIm2V5k0Z/Td8TH2OvTo8MqfGBLx6N60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0p6Gx/btsIm2V5k0Z/Td8TH2OvTo8MqfGBLx6N60/img.png&quot; data-alt=&quot;https://codepen.io/dev_loop/pen/MWKbJmO&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0p6Gx/btsIm2V5k0Z/Td8TH2OvTo8MqfGBLx6N60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0p6Gx%2FbtsIm2V5k0Z%2FTd8TH2OvTo8MqfGBLx6N60%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;2152&quot; height=&quot;1380&quot; data-origin-width=&quot;2152&quot; data-origin-height=&quot;1380&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://codepen.io/dev_loop/pen/MWKbJmO&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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 class=&quot;codepen&quot; style=&quot;height: 884.12890625px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot; data-height=&quot;900&quot; data-default-tab=&quot;html,result&quot; data-slug-hash=&quot;MWKbJmO&quot; data-pen-title=&quot;Voyage Slider&quot; data-user=&quot;dev_loop&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/dev_loop/pen/MWKbJmO&quot;&gt; Voyage Slider&lt;/a&gt; by Sikriti Dakua (&lt;a href=&quot;https://codepen.io/dev_loop&quot;&gt;@dev_loop&lt;/a&gt;) on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;script src=&quot;https://cpwebassets.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : &lt;a href=&quot;https://codepen.io/dev_loop/pen/MWKbJmO&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://codepen.io/dev_loop/pen/MWKbJmO&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>CodePen/캐러셀</category>
      <category>무한루프 슬라이드</category>
      <category>백그라운드 변경 캐러셀</category>
      <category>슬라이드</category>
      <category>캐러셀</category>
      <category>캐러셀 만들기</category>
      <category>코드펜</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/626</guid>
      <comments>https://seeminglyjs.tistory.com/626#entry626comment</comments>
      <pubDate>Fri, 5 Jul 2024 10:54:49 +0900</pubDate>
    </item>
    <item>
      <title>Amazon EC2 인스턴스에서 스왑 메모리 설정하기: 2GB 스왑 공간 추가 가이드</title>
      <link>https://seeminglyjs.tistory.com/625</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-06-24&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;ashe-walker-JDkrr7G0Gdk-unsplash.jpg&quot; data-origin-width=&quot;4160&quot; data-origin-height=&quot;6240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvX7sH/btsH9sszdhw/TLOrwf5LjylLMO5YT6kpNk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvX7sH/btsH9sszdhw/TLOrwf5LjylLMO5YT6kpNk/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Ashe Walker&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvX7sH/btsH9sszdhw/TLOrwf5LjylLMO5YT6kpNk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvX7sH%2FbtsH9sszdhw%2FTLOrwf5LjylLMO5YT6kpNk%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;482&quot; height=&quot;723&quot; data-filename=&quot;ashe-walker-JDkrr7G0Gdk-unsplash.jpg&quot; data-origin-width=&quot;4160&quot; data-origin-height=&quot;6240&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Ashe Walker&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;스왑 메모리란?&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;스왑 메모리는 물리적 RAM이 부족할 때, 디스크 공간을 임시로 RAM처럼 사용하는 공간입니다. 스왑 공간을 활용하면 시스템이 메모리 부족으로 인한 문제를 덜 겪게 되어 더 안정적으로 동작할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 스왑 파일 생성하기&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;먼저, 2GB 크기의 스왑 파일을 생성합니다. 이는 dd 명령어를 사용하여 가능합니다. (아래 명령어가 안되면 추가 코드 참고)&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1719012116052&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo fallocate -l 2G /swapfile&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;fallocate 명령이 지원되지 않는 경우, dd 명령을 사용할 수 있습니다&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1719012077306&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo dd if=/dev/zero of=/swapfile bs=1M count=2048&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. 스왑 파일 설정 및 활성화&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;생성한 파일을 스왑 파일로 설정하고 활성화합니다.&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;스왑 파일 설정&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1719012173078&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo mkswap /swapfile&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;위 명령어는 /swapfile을 스왑 영역으로 설정합니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;스왑 파일 활성화&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1719012202670&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo swapon /swapfile&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;3. 스왑 파일 권한 설정&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;보안을 위해 스왑 파일의 권한을 설정합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1719012245320&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo chmod 600 /swapfile&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;위 명령어는 /swapfile의 권한을 600으로 설정하여, 오직 루트 사용자만 읽고 쓸 수 있도록 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;4. 스왑 파일을 fstab에 추가&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;시스템 재부팅 시 스왑 파일이 자동으로 마운트되도록 /etc/fstab 파일에 추가합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1719012277027&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab&lt;/code&gt;&lt;/pre&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;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;5. 스왑 설정 확인&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;스왑 파일이 제대로 설정되었는지 확인합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1719012294216&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo swapon --show&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;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;위 명령어를 실행하면 활성화된 스왑 공간 목록이 표시됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;또는 다음 명령어를 사용하여 현재 스왑 사용량을 확인할 수도 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1719012309592&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;free -m&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;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;위 명령어를 실행하면 시스템의 메모리와 스왑 사용량이 표시됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이제 Amazon EC2 인스턴스에 2GB의 스왑 공간이 추가되었습니다. 이를 통해 메모리 부족으로 인한 성능 저하를 완화할 수 있습니다. 스왑 메모리는 물리적 RAM만큼 빠르지는 않지만, 시스템이 메모리 부족 상태에서 더 안정적으로 동작하도록 도와줍니다. &lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EB%B0%B0%EA%B2%BD%EC%9D%B4-%ED%9D%90%EB%A6%BF%ED%95%9C-%EA%BD%83%EC%9D%98-%ED%81%B4%EB%A1%9C%EC%A6%88%EC%97%85-JDkrr7G0Gdk?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@marsupialpudding?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Ashe Walker&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>AWS/EC2</category>
      <category>ec2  dd</category>
      <category>ec2 fallocate</category>
      <category>ec2 swap</category>
      <category>ec2 메모리 부족</category>
      <category>ec2 스압 설정</category>
      <category>리눅스 메모리 부족 해결</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/625</guid>
      <comments>https://seeminglyjs.tistory.com/625#entry625comment</comments>
      <pubDate>Mon, 24 Jun 2024 10:28:59 +0900</pubDate>
    </item>
    <item>
      <title>iOS 웹뷰에서 클릭 시 발생하는 회색 플리커 현상 제거하기</title>
      <link>https://seeminglyjs.tistory.com/624</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-06-13&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;benjamin-ashton-nWzaANoZ0wE-unsplash.jpg&quot; data-origin-width=&quot;3548&quot; data-origin-height=&quot;5322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCq48b/btsHVXOnczP/i9CzkTTukvgJqhKHQH7oN1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCq48b/btsHVXOnczP/i9CzkTTukvgJqhKHQH7oN1/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Benjamin Ashton&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCq48b/btsHVXOnczP/i9CzkTTukvgJqhKHQH7oN1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCq48b%2FbtsHVXOnczP%2Fi9CzkTTukvgJqhKHQH7oN1%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;434&quot; height=&quot;651&quot; data-filename=&quot;benjamin-ashton-nWzaANoZ0wE-unsplash.jpg&quot; data-origin-width=&quot;3548&quot; data-origin-height=&quot;5322&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Benjamin Ashton&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;iOS 웹뷰에서 onclick 이벤트를 처리할 때 클릭된 영역에 회색 플리커 현상이 나타나는 문제를 경험하신 적이 있나요? 이는 웹 콘텐츠가 기본적으로 적용하는 클릭 피드백 효과로 인해 발생합니다. 이 블로그 포스트에서는 이러한 클릭 피드백 효과를 제거하는 방법을 소개해 드리겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. -webkit-tap-highlight-color&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;가장 간단한 방법은 CSS의 -webkit-tap-highlight-color 속성을 사용하는 것입니다. 이 속성을 통해 클릭 피드백 효과를 완전히 제거할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1718183162423&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;* {
    -webkit-tap-highlight-color: transparent;
}&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;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이 코드를 스타일 시트에 추가하면 페이지의 모든 요소에서 탭 하이라이트 효과가 제거됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. -webkit-touch-callout&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;또한, -webkit-touch-callout 속성을 사용하여 터치 콜아웃(롱 프레스 시 나타나는 메뉴)을 비활성화할 수도 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1718183215573&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;* {
    -webkit-touch-callout: none;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;3. touch-action&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;touch-action 속성을 사용하여 기본 터치 동작을 제어할 수 있습니다. 클릭 피드백 효과를 제거하려면 이 속성을 설정할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1718183227290&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;* {
    touch-action: manipulation;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;4. Button 및 Link 요소의 스타일링&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;특히 버튼 및 링크 요소에 대해서도 스타일을 적용할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1718183238790&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;button, a {
    -webkit-tap-highlight-color: transparent;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;5. 예제: 모든 방법을 결합&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;아래는 위의 모든 방법을 결합한 전체 예제입니다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1718183251558&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
    &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&amp;gt;
    &amp;lt;title&amp;gt;iOS WebView Click Effect Removal&amp;lt;/title&amp;gt;
    &amp;lt;style&amp;gt;
        * {
            -webkit-tap-highlight-color: transparent;
            -webkit-touch-callout: none;
            touch-action: manipulation;
        }
        
        button, a {
            -webkit-tap-highlight-color: transparent;
        }
    &amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;div&amp;gt;
        &amp;lt;button onclick=&quot;alert('Button clicked!')&quot;&amp;gt;Click Me&amp;lt;/button&amp;gt;
        &amp;lt;a href=&quot;#&quot; onclick=&quot;alert('Link clicked!')&quot;&amp;gt;Click Me&amp;lt;/a&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;위 코드를 웹뷰에 적용하면 클릭 피드백 효과가 제거되어 클릭 시 회색 플리커 현상이 발생하지 않습니다. 프로젝트의 요구 사항에 따라 필요한 부분만 선택하여 적용하시면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%ED%95%B4%EB%B3%80%EC%9D%98-%EB%AC%BC-%EC%9C%84%EB%A1%9C-%ED%95%B4%EA%B0%80-%EC%A7%80%EA%B3%A0-%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4-nWzaANoZ0wE?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@bashton?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Benjamin Ashton&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>App/IOS</category>
      <category>-webkit-tap-highlight-color</category>
      <category>-webkit-touch-callout</category>
      <category>ios 웹뷰에서 클릭 시 발생하는 회색 플리커 현상 제거하기</category>
      <category>touch-action</category>
      <category>이벤트 리스너 깜빡임 제거</category>
      <category>이벤트 플리커 제커</category>
      <category>클릭이벤트 플리커</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/624</guid>
      <comments>https://seeminglyjs.tistory.com/624#entry624comment</comments>
      <pubDate>Thu, 13 Jun 2024 10:10:09 +0900</pubDate>
    </item>
    <item>
      <title>JPA와 PostgreSQL의 TIME 타입 간 호환성 문제 해결하기</title>
      <link>https://seeminglyjs.tistory.com/623</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-06-11&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;grigorii-shcheglov-19lhucLi3Ro-unsplash.jpg&quot; data-origin-width=&quot;6240&quot; data-origin-height=&quot;4160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRoFEm/btsHSvxFmgG/3o8UzyUSirMOpaLxBW9FbK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRoFEm/btsHSvxFmgG/3o8UzyUSirMOpaLxBW9FbK/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Grigorii Shcheglov&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRoFEm/btsHSvxFmgG/3o8UzyUSirMOpaLxBW9FbK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRoFEm%2FbtsHSvxFmgG%2F3o8UzyUSirMOpaLxBW9FbK%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;528&quot; height=&quot;352&quot; data-filename=&quot;grigorii-shcheglov-19lhucLi3Ro-unsplash.jpg&quot; data-origin-width=&quot;6240&quot; data-origin-height=&quot;4160&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Grigorii Shcheglov&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 원인&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;최근 프로젝트에서 JPA를 사용하여 PostgreSQL 데이터베이스와 상호 작용하던 중, 예약 시간을 나타내는 엔티티 필드에서 호환성 문제가 발생했습니다. LocalTime으로 매핑된 reservationTime 필드를 사용할 때, PostgreSQL의 TIME 컬럼과의 호환성 문제로 인해 &quot;Invalid value for NanoOfSecond&quot; 오류가 발생했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-size=&quot;size16&quot; data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Invalid value for NanoOfSecond (valid values 0 - 999999999): -935000000&lt;br /&gt;&lt;br /&gt;&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;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;기존 오류가 발생하던 entity 정보는 아래와 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1717994489563&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  @Column(name = &quot;reservation_tm&quot;, columnDefinition = &quot;TIME&quot;)
    private LocalTime reservationTime;  //예약 시간&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. 해결방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;문제를 해결하기 위해 다양한 시도를 했지만, 가장 간단하면서도 효과적인 해결책은 @Temporal(TemporalType.TIME) 어노테이션을 추가하여 LocalTime 대신 Date 객체를 사용하는 것이었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1717994469193&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Column(name = &quot;reservation_tm&quot;, columnDefinition = &quot;TIME&quot;)
@Temporal(TemporalType.TIME)
private Date reservationTime;  //예약 시간&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이 변경으로 인해 JPA는 reservation_tm 컬럼을 시간 정보만 다루는 것으로 인식하고, 그에 맞게 변환하여 처리하게 됩니다. 이를 통해 &quot;Invalid value for NanoOfSecond&quot; 오류가 해결되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EB%B0%B0%EA%B2%BD%EC%97%90-%EA%B1%B4%EB%AC%BC%EC%9D%B4-%EC%9E%88%EB%8A%94-%ED%85%85-%EB%B9%88-%EA%B1%B0%EB%A6%AC-19lhucLi3Ro?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@shegiva?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Grigorii Shcheglov&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>WEB/JPA</category>
      <category>invalid value for nanoofsecond (valid values 0 - 999999999): -935000000</category>
      <category>jpa와 postgresql의 time 타입 간 호환성</category>
      <category>temporal</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/623</guid>
      <comments>https://seeminglyjs.tistory.com/623#entry623comment</comments>
      <pubDate>Tue, 11 Jun 2024 10:44:38 +0900</pubDate>
    </item>
    <item>
      <title>Flutter에서 iOS 앱의 로컬 네트워크 접근 설정하기</title>
      <link>https://seeminglyjs.tistory.com/622</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-05-31&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;jorgen-hendriksen-girQJHREhvA-unsplash.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;6000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5Kd8T/btsHGSs1fQb/xqeG7EiD2kXkvy4m7tpmp0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5Kd8T/btsHGSs1fQb/xqeG7EiD2kXkvy4m7tpmp0/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Jorgen Hendriksen&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5Kd8T/btsHGSs1fQb/xqeG7EiD2kXkvy4m7tpmp0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5Kd8T%2FbtsHGSs1fQb%2FxqeG7EiD2kXkvy4m7tpmp0%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;342&quot; height=&quot;513&quot; data-filename=&quot;jorgen-hendriksen-girQJHREhvA-unsplash.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;6000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Jorgen Hendriksen&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Flutter로 iOS 앱을 개발하면서 로컬 네트워크에 있는 서버에 접근해야 할 때가 있습니다. 이때 iOS 14 이상에서는 NSLocalNetworkUsageDescription을 설정해야 하며, HTTP를 사용하는 경우에는 ATS(App Transport Security) 설정도 필요합니다. 이번 포스트에서는 Info.plist 파일을 수정하여 이러한 설정을 추가하는 방법을 소개합니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. Info.plist 파일이란?&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Info.plist 파일은 iOS 앱의 설정 파일로, 앱이 실행될 때 필요한 각종 설정과 권한을 정의합니다. 이 파일은 Flutter 프로젝트의 ios/Runner 디렉토리에 위치해 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. Info.plist 파일 수정하기&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1.Info.plist 파일 열기&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;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;먼저 Flutter 프로젝트의 루트 디렉토리로 이동하여 ios/Runner/Info.plist 파일을 엽니다. 이 파일을 텍스트 에디터 또는 Xcode로 열 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. NSLocalNetworkUsageDescription 추가&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;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;iOS 14 이상에서는 로컬 네트워크에 접근하기 위해 사용자의 허가를 받아야 합니다. 이를 위해 Info.plist 파일에 NSLocalNetworkUsageDescription 키를 추가합니다. 이 키는 사용자가 앱이 로컬 네트워크에 접근할 때 표시되는 설명을 정의합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;pre id=&quot;code_1717042654680&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;key&amp;gt;NSLocalNetworkUsageDescription&amp;lt;/key&amp;gt;
&amp;lt;string&amp;gt;앱이 로컬 네트워크에 접근하기 위해 필요합니다.&amp;lt;/string&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;3. ATS(App Transport Security) 설정 추가 (필요 시)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;만약 로컬 서버가 HTTP 프로토콜을 사용하고 있다면, ATS 설정을 통해 HTTP 요청을 허용해야 합니다. 기본적으로 iOS는 보안을 위해 HTTPS 연결만 허용합니다. Info.plist 파일에 아래와 같은 예외 규칙을 추가하여 HTTP 요청을 허용할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;pre id=&quot;code_1717042677581&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;key&amp;gt;NSAppTransportSecurity&amp;lt;/key&amp;gt;
&amp;lt;dict&amp;gt;
    &amp;lt;key&amp;gt;NSAllowsArbitraryLoads&amp;lt;/key&amp;gt;
    &amp;lt;true/&amp;gt;
&amp;lt;/dict&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;4. 최종 Info.plist 파일 예제&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;아래는 NSLocalNetworkUsageDescription과 NSAppTransportSecurity 설정이 추가된 Info.plist 파일의 예제입니다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;pre id=&quot;code_1717042692881&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&amp;gt;
&amp;lt;plist version=&quot;1.0&quot;&amp;gt;
&amp;lt;dict&amp;gt;
    ...
    &amp;lt;key&amp;gt;NSAppTransportSecurity&amp;lt;/key&amp;gt;
    &amp;lt;dict&amp;gt;
        &amp;lt;key&amp;gt;NSAllowsArbitraryLoads&amp;lt;/key&amp;gt;
        &amp;lt;true/&amp;gt;
    &amp;lt;/dict&amp;gt;
    &amp;lt;key&amp;gt;NSLocalNetworkUsageDescription&amp;lt;/key&amp;gt;
    &amp;lt;string&amp;gt;앱이 로컬 네트워크에 접근하기 위해 필요합니다.&amp;lt;/string&amp;gt;
    ...
&amp;lt;/dict&amp;gt;
&amp;lt;/plist&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;5. 결론&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이번 포스트에서는 Flutter로 개발한 iOS 앱에서 로컬 네트워크 접근을 위해 필요한 설정을 Info.plist 파일에 추가하는 방법을 소개했습니다. NSLocalNetworkUsageDescription과 NSAppTransportSecurity 설정을 통해 사용자에게 필요한 권한을 요청하고, HTTP 요청을 허용할 수 있습니다. 이 설정을 통해 로컬 네트워크에 있는 서버와 원활하게 통신할 수 있기를 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.apple.com/documentation/bundleresources/information_property_list/nslocalnetworkusagedescription&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://developer.apple.com/documentation/bundleresources/information_property_list/nslocalnetworkusagedescription&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1717042894412&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;NSLocalNetworkUsageDescription | Apple Developer Documentation&quot; data-og-description=&quot;A message that tells the user why the app is requesting access to the local network.&quot; data-og-host=&quot;developer.apple.com&quot; data-og-source-url=&quot;https://developer.apple.com/documentation/bundleresources/information_property_list/nslocalnetworkusagedescription&quot; data-og-url=&quot;https://docs.developer.apple.com/documentation/bundleresources/information_property_list/nslocalnetworkusagedescription&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/p1Ndu/hyWdj2UcMj/TwlYn1A8cNjZ2cRAMhia2k/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bagzwU/hyWdd9tvAq/gps1uobKqUFwmW9Tly6Alk/img.jpg?width=1024&amp;amp;height=512&amp;amp;face=0_0_1024_512&quot;&gt;&lt;a href=&quot;https://developer.apple.com/documentation/bundleresources/information_property_list/nslocalnetworkusagedescription&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.apple.com/documentation/bundleresources/information_property_list/nslocalnetworkusagedescription&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/p1Ndu/hyWdj2UcMj/TwlYn1A8cNjZ2cRAMhia2k/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bagzwU/hyWdd9tvAq/gps1uobKqUFwmW9Tly6Alk/img.jpg?width=1024&amp;amp;height=512&amp;amp;face=0_0_1024_512');&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;NSLocalNetworkUsageDescription | Apple Developer Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;A message that tells the user why the app is requesting access to the local network.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.apple.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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EB%88%88-%EB%8D%AE%EC%9D%B8-%EC%82%B0%EC%9D%98-%ED%9D%91%EB%B0%B1-%EC%82%AC%EC%A7%84-girQJHREhvA?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@jor9en?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Jorgen Hendriksen&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>App/Flutter</category>
      <category>nsapptransportsecurity</category>
      <category>nslocalnetworkusagedescription</category>
      <category>testflight private ip</category>
      <category>testflight 사설 아이피 접근</category>
      <category>testflight 사설망 접근 설정</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/622</guid>
      <comments>https://seeminglyjs.tistory.com/622#entry622comment</comments>
      <pubDate>Fri, 31 May 2024 10:24:24 +0900</pubDate>
    </item>
    <item>
      <title>html/css 드롭다운 메뉴 만들기 [No JavaScript!!]</title>
      <link>https://seeminglyjs.tistory.com/621</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-05-28&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;archee-lal-AgMREKB2wJ4-unsplash.jpg&quot; data-origin-width=&quot;7894&quot; data-origin-height=&quot;5265&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VcbL8/btsHFqBBpwn/ApecFD1gAtvHcu6djulMg1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VcbL8/btsHFqBBpwn/ApecFD1gAtvHcu6djulMg1/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Archee Lal&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VcbL8/btsHFqBBpwn/ApecFD1gAtvHcu6djulMg1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVcbL8%2FbtsHFqBBpwn%2FApecFD1gAtvHcu6djulMg1%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;478&quot; height=&quot;319&quot; data-filename=&quot;archee-lal-AgMREKB2wJ4-unsplash.jpg&quot; data-origin-width=&quot;7894&quot; data-origin-height=&quot;5265&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Archee Lal&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;::after 선택자를 이용해 가상의 html 영역을 만들고 이후 해당 부분을 hover 하는 방식을 이용해 간단하게 드롭다운 메뉴를 구현할 수 있다. 코드를 살펴보자.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. html&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1716812295792&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;menu&quot;&amp;gt;menu
  &amp;lt;div class=&quot;sub_menu&quot;&amp;gt;
    &amp;lt;div class=&quot;sub_menu_info&quot;&amp;gt;sub1&amp;lt;/div&amp;gt; 
    &amp;lt;div class=&quot;sub_menu_info&quot;&amp;gt;sub2&amp;lt;/div&amp;gt; 
  &amp;lt;/div&amp;gt;
&amp;lt;/div&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;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;코드는 간단하다. 우선적으로 hover 를 진행할 메뉴를 만들고 이후 드롭다운 메뉴리스트를 만들면 된다. 위의 코드에서는 menu 클래스가 호버를 진행할 항목이고 sub_menu 가 드롭다운이 되는 메뉴이다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;3. css&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;처음 방법에서 소개했던 것과 같이 menu 에 가상 영역 ::after를 만들고 해당 부분을 호버시에 sub_menu의 display 가 flex 가 되면서 드롭다운 영역이 나타나게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1716812374863&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.menu {
    position: relative;
    display: flex;
    z-index: 100;
}
.menu::after {
    cursor: pointer;
    content: &quot;&quot;;
    display: block;
    position: absolute;
    bottom: -2rem; 
    left: 0;
    right: 0;
    height: 40px; /* 가상 영역의 높이 */
}

.menu:hover .sub_menu {
    display: flex;
    width: 5rem;
}

.sub_menu {
    display: none;
    position: absolute;
    padding: 0.75rem 1rem;
    flex-direction: column;
    align-items: flex-start;
    gap: 1.25rem;
    bottom: -7rem;
    min-width: 10rem;

    border-radius: 0.25rem;
    background-color: green;
    box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.25);

    z-index: 5;
}

.sub_menu_info{
    display: flex;
    width: 5rem;
    height: 1.75rem;
    justify-content: start;
    align-items: center;
    cursor: pointer;
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;실제 구현 후 menu 텍스트에 호버링을 해보면 아래와 같은 결과를 볼 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;247&quot; data-origin-height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6ldVV/btsHD8INgs1/fa5sFy5ywmdtLAHYM0lGOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6ldVV/btsHD8INgs1/fa5sFy5ywmdtLAHYM0lGOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6ldVV/btsHD8INgs1/fa5sFy5ywmdtLAHYM0lGOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6ldVV%2FbtsHD8INgs1%2Ffa5sFy5ywmdtLAHYM0lGOK%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;247&quot; height=&quot;154&quot; data-origin-width=&quot;247&quot; data-origin-height=&quot;154&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;4. 결과 확인&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;실제 실행 결과는 아래의 링크에서 확인이 가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; &lt;a href=&quot;https://codepen.io/Js-Sound/pen/VwOmeEd&quot;&gt;A Pen by Js Sound (codepen.io)&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1716812493816&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;VwOmeEd&quot; data-og-description=&quot;...&quot; data-og-host=&quot;codepen.io&quot; data-og-source-url=&quot;https://codepen.io/Js-Sound/pen/VwOmeEd&quot; data-og-url=&quot;https://codepen.io/Js-Sound/details/VwOmeEd&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://codepen.io/Js-Sound/pen/VwOmeEd&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://codepen.io/Js-Sound/pen/VwOmeEd&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;VwOmeEd&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;codepen.io&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 :&amp;nbsp;&lt;b&gt; 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EC%82%B0%EC%9D%84-%EB%B0%B0%EA%B2%BD%EC%9C%BC%EB%A1%9C-%EC%88%98%EC%97%AD-%EC%95%9E%EC%97%90-%EC%84%9C-%EC%9E%88%EB%8A%94-%EB%82%A8%EC%9E%90-AgMREKB2wJ4?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@vrchh?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Archee Lal&lt;/a&gt; &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>WEB/CSS</category>
      <category>::after</category>
      <category>css dropdown</category>
      <category>css 드롭다운 구현</category>
      <category>html dropdown nav</category>
      <category>html 드롭다운 메뉴 구현</category>
      <category>드롭다운 자바스크립트 없이</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/621</guid>
      <comments>https://seeminglyjs.tistory.com/621#entry621comment</comments>
      <pubDate>Mon, 27 May 2024 21:25:55 +0900</pubDate>
    </item>
    <item>
      <title>Spring boot 파비콘 적용 방법 favicon.ico</title>
      <link>https://seeminglyjs.tistory.com/620</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-05-08&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;pascal-bullan-Jv1ZGY1aXEg-unsplash.jpg&quot; data-origin-width=&quot;3129&quot; data-origin-height=&quot;4688&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D6o4f/btsHb8iquEg/B3HUUi8GbHXoKihl6mki31/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D6o4f/btsHb8iquEg/B3HUUi8GbHXoKihl6mki31/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Pascal Bullan&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D6o4f/btsHb8iquEg/B3HUUi8GbHXoKihl6mki31/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD6o4f%2FbtsHb8iquEg%2FB3HUUi8GbHXoKihl6mki31%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;302&quot; height=&quot;452&quot; data-filename=&quot;pascal-bullan-Jv1ZGY1aXEg-unsplash.jpg&quot; data-origin-width=&quot;3129&quot; data-origin-height=&quot;4688&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Pascal Bullan&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;웹사이트 탭에 좌측에 나타나는 아이콘 같은 것을 파비콘이라고 하는데 해당 부분을 적용하는 방법을 알아보자.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;366&quot; data-origin-height=&quot;160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HtXj7/btsHcbfeCqp/WxUVwINEvezbTtwg0X59i1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HtXj7/btsHcbfeCqp/WxUVwINEvezbTtwg0X59i1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HtXj7/btsHcbfeCqp/WxUVwINEvezbTtwg0X59i1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHtXj7%2FbtsHcbfeCqp%2FWxUVwINEvezbTtwg0X59i1%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;366&quot; height=&quot;160&quot; data-origin-width=&quot;366&quot; data-origin-height=&quot;160&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;우선 favicon.ico 파일을 만들어야 하는데 ico 파일 정보를 만드는 것은 아래링크를 참고하자.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://favicon.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://favicon.io/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715045843168&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;Favicon.io - The Ultimate Favicon Generator (Free)&quot; data-og-description=&quot;With Favicon.io you can quickly generate a favicon for your website for free!&quot; data-og-host=&quot;favicon.io&quot; data-og-source-url=&quot;https://favicon.io/&quot; data-og-url=&quot;https://favicon.io/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ZLSeg/hyV2q8gyVw/8WdXbPta3WaDa7MSInacMk/img.png?width=1200&amp;amp;height=627&amp;amp;face=0_0_1200_627&quot;&gt;&lt;a href=&quot;https://favicon.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://favicon.io/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ZLSeg/hyV2q8gyVw/8WdXbPta3WaDa7MSInacMk/img.png?width=1200&amp;amp;height=627&amp;amp;face=0_0_1200_627');&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;Favicon.io - The Ultimate Favicon Generator (Free)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;With Favicon.io you can quickly generate a favicon for your website for free!&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;favicon.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;그리고 만들어진 파비콘 정보를 아래 경로에 삽입한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1715045904683&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;resources/static/favicon.ico&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;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이후 자신의 프로젝트를 재실행하면 파비콘이 적용된 것을 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EC%98%86%EC%97%90-%EC%8B%9C%EA%B3%84%EA%B0%80-%EC%9E%88%EB%8A%94-%EB%86%92%EC%9D%80-%EB%85%B8%EB%9E%80%EC%83%89-%EA%B1%B4%EB%AC%BC-Jv1ZGY1aXEg?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@jetztabertempo?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Pascal Bullan&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>WEB/Spring</category>
      <category>favicon.ico</category>
      <category>spring boot 파비콘</category>
      <category>spring favicon</category>
      <category>spring 파비콘 적용방법</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/620</guid>
      <comments>https://seeminglyjs.tistory.com/620#entry620comment</comments>
      <pubDate>Wed, 8 May 2024 09:40:09 +0900</pubDate>
    </item>
    <item>
      <title>vim은 되는 vi 안될때 해결방법 [vi : command not found]</title>
      <link>https://seeminglyjs.tistory.com/619</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-04-30&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;vidar-nordli-mathisen-aE6F7CmHnx0-unsplash.jpg&quot; data-origin-width=&quot;3255&quot; data-origin-height=&quot;2160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bivpMy/btsGTGF5aIM/X5JCy3jwek0XC01zRbWi1K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bivpMy/btsGTGF5aIM/X5JCy3jwek0XC01zRbWi1K/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Vidar Nordli-Mathisen&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bivpMy/btsGTGF5aIM/X5JCy3jwek0XC01zRbWi1K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbivpMy%2FbtsGTGF5aIM%2FX5JCy3jwek0XC01zRbWi1K%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;622&quot; height=&quot;413&quot; data-filename=&quot;vidar-nordli-mathisen-aE6F7CmHnx0-unsplash.jpg&quot; data-origin-width=&quot;3255&quot; data-origin-height=&quot;2160&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Vidar Nordli-Mathisen&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;1. 방법&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;간단히 심볼릭 링크를 걸어주면 해결된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1713940152453&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo ln -s /usr/bin/vim /usr/bin/vi&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EB%AC%BC-%ED%95%9C%EA%B0%80%EC%9A%B4%EB%8D%B0%EC%97%90-%EC%9E%88%EB%8A%94-%EC%82%B0-aE6F7CmHnx0?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@vidarnm?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Vidar Nordli-Mathisen&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>OS/Linux</category>
      <category>vi</category>
      <category>vi : command not found</category>
      <category>vi not found</category>
      <category>vim은 되는 vi 안될때 해결방법</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/619</guid>
      <comments>https://seeminglyjs.tistory.com/619#entry619comment</comments>
      <pubDate>Tue, 30 Apr 2024 09:32:24 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 타임존 한국으로 변경하는 방법 timedatectl</title>
      <link>https://seeminglyjs.tistory.com/618</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-04-25&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;set-sj-3feSFMt6d-Y-unsplash.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;6000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdDUeu/btsGR2Dm6Gi/dVd9FyE6vBkku3T3WjIEW0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdDUeu/btsGR2Dm6Gi/dVd9FyE6vBkku3T3WjIEW0/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 set.sj&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdDUeu/btsGR2Dm6Gi/dVd9FyE6vBkku3T3WjIEW0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdDUeu%2FbtsGR2Dm6Gi%2FdVd9FyE6vBkku3T3WjIEW0%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;385&quot; height=&quot;578&quot; data-filename=&quot;set-sj-3feSFMt6d-Y-unsplash.jpg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;6000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 set.sj&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;timedatectl 을 이용해서 타임존을 Asia/Seoul 으로 변경한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1713937559390&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;timedatectl set-timezone Asia/Seoul&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이후 날짜를 확인하면 한국시간으로 설정 된 것을 확인 할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1713937582992&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;bash-5.2# date
Wed Apr 24 14:46:12 KST 2024&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EC%95%BC%EC%9E%90%EC%88%98-%EC%9E%8E%EC%82%AC%EA%B7%80-%ED%81%B4%EB%A1%9C%EC%A6%88%EC%97%85-3feSFMt6d-Y?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@setsj?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;set.sj&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>OS/Linux</category>
      <category>ec2 타임존 변경</category>
      <category>timedatectl</category>
      <category>timedatectl set-timezone asia/seoul</category>
      <category>리눅스 타임존</category>
      <category>서버 타임존 변경</category>
      <category>타임존 변경</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/618</guid>
      <comments>https://seeminglyjs.tistory.com/618#entry618comment</comments>
      <pubDate>Thu, 25 Apr 2024 09:48:33 +0900</pubDate>
    </item>
    <item>
      <title>firebase: please verify the new email before changing email. 해결방법</title>
      <link>https://seeminglyjs.tistory.com/617</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-04-16&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;mathias-reding-ykHsHfI7gi8-unsplash.jpg&quot; data-origin-width=&quot;4160&quot; data-origin-height=&quot;6240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oSWe4/btsGCcSI36i/2BQACWdju2NS6wMpBNkrmk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oSWe4/btsGCcSI36i/2BQACWdju2NS6wMpBNkrmk/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Mathias Reding&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oSWe4/btsGCcSI36i/2BQACWdju2NS6wMpBNkrmk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoSWe4%2FbtsGCcSI36i%2F2BQACWdju2NS6wMpBNkrmk%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;407&quot; height=&quot;611&quot; data-filename=&quot;mathias-reding-ykHsHfI7gi8-unsplash.jpg&quot; data-origin-width=&quot;4160&quot; data-origin-height=&quot;6240&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Mathias Reding&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Authentication &amp;gt; 설정 &amp;gt; 사용자 작업 &amp;gt; 이메일 열거 보호(권장) 체크박스 해제를 해주면 된다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124; text-align: start; font-family: 'Noto Serif KR';&quot;&gt;해당 부분은 &lt;span style=&quot;background-color: #ffffff; color: #202124; text-align: start;&quot;&gt;&amp;nbsp;2023년 9월 15일 이후에 프로젝트를 만든 경우 이메일 열거 보호가 기본적으로 사용 설정이 되는데 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124; text-align: start; font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202124; text-align: start;&quot;&gt;이는 &lt;/span&gt;이메일 열거는 악의적인 행위자가 API에 이메일 주소를 전달하고 응답을 확인하여 시스템의 사용자를 추측하거나 확인하는 무차별 대입 공격의 한 유형을 방지하기 위해 설정이 된다고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1877&quot; data-origin-height=&quot;783&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/V5Kiz/btsGBgO6rG1/gFI9DF9ckdyYy0dkP2EFf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/V5Kiz/btsGBgO6rG1/gFI9DF9ckdyYy0dkP2EFf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/V5Kiz/btsGBgO6rG1/gFI9DF9ckdyYy0dkP2EFf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FV5Kiz%2FbtsGBgO6rG1%2FgFI9DF9ckdyYy0dkP2EFf0%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;1877&quot; height=&quot;783&quot; data-origin-width=&quot;1877&quot; data-origin-height=&quot;783&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. 참고&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/77147854/firebase-please-verify-the-new-email-before-changing-email-auth-operation-not&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://stackoverflow.com/questions/77147854/firebase-please-verify-the-new-email-before-changing-email-auth-operation-not&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713075570674&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;firebase: please verify the new email before changing email. (auth/operation-not-allowed)&quot; data-og-description=&quot;I was using Firebase authentication by Email/Password on my react-native app and doing emailUpdate through the app successfully , until i decided to move to new Firebase project with the same app&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/77147854/firebase-please-verify-the-new-email-before-changing-email-auth-operation-not&quot; data-og-url=&quot;https://stackoverflow.com/questions/77147854/firebase-please-verify-the-new-email-before-changing-email-auth-operation-not&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cpngZy/hyVMZE4QBM/LbSXcwGgYoEYXgcmwsuJ70/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316,https://scrap.kakaocdn.net/dn/bh5ycc/hyVPMqxOlo/wqWjgi9MHDOEmqTs7xDb01/img.png?width=2600&amp;amp;height=1486&amp;amp;face=0_0_2600_1486&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/77147854/firebase-please-verify-the-new-email-before-changing-email-auth-operation-not&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/77147854/firebase-please-verify-the-new-email-before-changing-email-auth-operation-not&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cpngZy/hyVMZE4QBM/LbSXcwGgYoEYXgcmwsuJ70/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316,https://scrap.kakaocdn.net/dn/bh5ycc/hyVPMqxOlo/wqWjgi9MHDOEmqTs7xDb01/img.png?width=2600&amp;amp;height=1486&amp;amp;face=0_0_2600_1486');&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;firebase: please verify the new email before changing email. (auth/operation-not-allowed)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I was using Firebase authentication by Email/Password on my react-native app and doing emailUpdate through the app successfully , until i decided to move to new Firebase project with the same app&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection?hl=ko&amp;amp;authuser=0&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection?hl=ko&amp;amp;authuser=0&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713075576740&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;이메일 열거 보호 사용 설정 또는 중지 &amp;nbsp;|&amp;nbsp; Identity Platform 문서 &amp;nbsp;|&amp;nbsp; Google Cloud&quot; data-og-description=&quot;의견 보내기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이메일 열거 보호 사용 설정 또는 중지 이 가이드에서는 이메일 열거 보호 기능을 설명하고 사&quot; data-og-host=&quot;cloud.google.com&quot; data-og-source-url=&quot;https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection?hl=ko&amp;amp;authuser=0&quot; data-og-url=&quot;https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection?hl=ko&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Fevjw/hyVMY7cN4b/la4xFpiCEkQ6fsuIXLvzD0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection?hl=ko&amp;amp;authuser=0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://cloud.google.com/identity-platform/docs/admin/email-enumeration-protection?hl=ko&amp;amp;authuser=0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Fevjw/hyVMY7cN4b/la4xFpiCEkQ6fsuIXLvzD0/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;이메일 열거 보호 사용 설정 또는 중지 &amp;nbsp;|&amp;nbsp; Identity Platform 문서 &amp;nbsp;|&amp;nbsp; Google Cloud&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;의견 보내기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이메일 열거 보호 사용 설정 또는 중지 이 가이드에서는 이메일 열거 보호 기능을 설명하고 사&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;cloud.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EB%AC%BC-%ED%95%9C%EA%B0%80%EC%9A%B4%EB%8D%B0%EC%97%90-%EC%95%89%EC%95%84%EC%9E%88%EB%8A%94-%EB%B0%94%EC%9C%84-%EA%B7%B8%EB%A3%B9-ykHsHfI7gi8?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@matreding?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Mathias Reding&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;</description>
      <category>App/Firebase</category>
      <category>firebase: please verify the new email before changing email</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/617</guid>
      <comments>https://seeminglyjs.tistory.com/617#entry617comment</comments>
      <pubDate>Tue, 16 Apr 2024 09:20:26 +0900</pubDate>
    </item>
    <item>
      <title>Vscode 자동 줄바꿈 끄기 (코드 콘솔 둘다)</title>
      <link>https://seeminglyjs.tistory.com/616</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-04-12&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jack-white-6Z9vBh5GgZc-unsplash.jpg&quot; data-origin-width=&quot;3929&quot; data-origin-height=&quot;5893&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dCcRHa/btsGqWCyzP8/w441kksZj2Ss0aK0kQin7k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dCcRHa/btsGqWCyzP8/w441kksZj2Ss0aK0kQin7k/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Jack White&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dCcRHa/btsGqWCyzP8/w441kksZj2Ss0aK0kQin7k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdCcRHa%2FbtsGqWCyzP8%2Fw441kksZj2Ss0aK0kQin7k%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;282&quot; height=&quot;423&quot; data-filename=&quot;jack-white-6Z9vBh5GgZc-unsplash.jpg&quot; data-origin-width=&quot;3929&quot; data-origin-height=&quot;5893&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Jack White&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Preferences -&amp;gt; Settings 클릭&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;487&quot; data-origin-height=&quot;255&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xjzoa/btsGq3uRxOa/6eMeW05wjtSMwXRwShhzD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xjzoa/btsGq3uRxOa/6eMeW05wjtSMwXRwShhzD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xjzoa/btsGq3uRxOa/6eMeW05wjtSMwXRwShhzD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxjzoa%2FbtsGq3uRxOa%2F6eMeW05wjtSMwXRwShhzD1%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;487&quot; height=&quot;255&quot; data-origin-width=&quot;487&quot; data-origin-height=&quot;255&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Code 스타일 자동 줄 바꿈 방지&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;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Word Wrap 검색 후 -&amp;gt; off 처리&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;413&quot; data-origin-height=&quot;107&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dDLpA1/btsGp3bxkLG/T550umye6GhyO5uuafWs1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dDLpA1/btsGp3bxkLG/T550umye6GhyO5uuafWs1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dDLpA1/btsGp3bxkLG/T550umye6GhyO5uuafWs1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdDLpA1%2FbtsGp3bxkLG%2FT550umye6GhyO5uuafWs1K%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;413&quot; height=&quot;107&quot; data-origin-width=&quot;413&quot; data-origin-height=&quot;107&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Debug Console 스타일 자동 줄 바꿈 방지&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;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Debug console 검색 후 아래로 조금 스크롤하다 보면 아래 설정 보임 체크박스 unCheck&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;959&quot; data-origin-height=&quot;87&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfkLbf/btsGrdYiJT9/zl8pEDdlrkuhNYUG3p8v8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfkLbf/btsGrdYiJT9/zl8pEDdlrkuhNYUG3p8v8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfkLbf/btsGrdYiJT9/zl8pEDdlrkuhNYUG3p8v8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfkLbf%2FbtsGrdYiJT9%2Fzl8pEDdlrkuhNYUG3p8v8k%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;959&quot; height=&quot;87&quot; data-origin-width=&quot;959&quot; data-origin-height=&quot;87&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EB%8F%99%EA%B5%B4-%ED%95%9C%EA%B0%80%EC%9A%B4%EB%8D%B0%EC%97%90-%EC%84%9C-%EC%9E%88%EB%8A%94-%EC%82%AC%EB%9E%8C-6Z9vBh5GgZc?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@jackwhite2803?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Jack White&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Tool/VScode</category>
      <category>vscode word wrap</category>
      <category>vscode 자동 줄바꿈</category>
      <category>vscode 줄바꿈 끄기</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/616</guid>
      <comments>https://seeminglyjs.tistory.com/616#entry616comment</comments>
      <pubDate>Fri, 12 Apr 2024 09:46:47 +0900</pubDate>
    </item>
    <item>
      <title>JPA  PostgreSQL 오류: ll_to_earth(numeric, numeric) 이름의 함수가 없음 해결 방법</title>
      <link>https://seeminglyjs.tistory.com/615</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-04-08&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;agnieszka-stankiewicz-srxDZxRcQuM-unsplash.jpg&quot; data-origin-width=&quot;6336&quot; data-origin-height=&quot;9504&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d60jaO/btsF548mpOy/3J7QWKp4Pr04FP4y28Xo2k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d60jaO/btsF548mpOy/3J7QWKp4Pr04FP4y28Xo2k/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Agnieszka Stankiewicz&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d60jaO/btsF548mpOy/3J7QWKp4Pr04FP4y28Xo2k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd60jaO%2FbtsF548mpOy%2F3J7QWKp4Pr04FP4y28Xo2k%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;313&quot; height=&quot;470&quot; data-filename=&quot;agnieszka-stankiewicz-srxDZxRcQuM-unsplash.jpg&quot; data-origin-width=&quot;6336&quot; data-origin-height=&quot;9504&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Agnieszka Stankiewicz&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 이슈 발생&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이미 &lt;b&gt;extension&lt;/b&gt;으로 &lt;b&gt;cube&lt;/b&gt;와 &lt;b&gt;earthdistance&lt;/b&gt;를 설치함에도 불구하고&amp;nbsp; 아래와 같은 에러가 발생했다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1711417331958&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;gt; create extension cube
[2024-03-26 10:25:45] [42710] 오류: &quot;cube&quot; 이름의 확장 모듈이 이미 있습니다
&amp;gt; create extension earthdistance
[2024-03-26 10:25:57] [42710] 오류: &quot;earthdistance&quot; 이름의 확장 모듈이 이미 있습니다
&amp;gt; select
       ,trh.latitude
       ,trh.longitude
  from test_tb
  where
      earth_distance(ll_to_earth(37.60929341197407, 127.05318831597205)
          , ll_to_earth(trh.latitude, trh.longitude)) &amp;lt; 1000
[2024-03-26 10:26:04] [42883] 오류: ll_to_earth(numeric, numeric) 이름의 함수가 없음
[2024-03-26 10:26:04] Hint: 지정된 이름 및 인자 자료형과 일치하는 함수가 없습니다. 명시적 형변환자를 추가해야 할 수도 있습니다.&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. 원인&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;create extension&lt;/b&gt; 사용 시 스키마를 지정해 주지 않으면 기본 스키마인 &lt;b&gt;public&lt;/b&gt;으로 들어가기 때문에 해당 함수를 같은 DB에 다른 스키마에서 호출하면 동작하지 않았던 것이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1711417427169&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;create extension 확장패키지&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;3. 해결방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;기존에 설치된 확장패키지를 제거하고 스키마 지정 후 재설치를 설정하면 함수 인식이 정상적으로된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1711417579069&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- cascade 옵션을 안주면 의존성 때문에 삭제안됨 해당 옵션을 주면 earthdistance 까지 같이 삭제된다.
drop extension cube cascade 

create extension cube with schema test
create extension earthdistance with schema test&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EB%B0%94%EC%9C%84%EC%99%80-%EC%82%B0%EC%9C%BC%EB%A1%9C-%EB%91%98%EB%9F%AC%EC%8B%B8%EC%9D%B8-%EC%88%98%EC%97%AD-srxDZxRcQuM?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@dubai_love_story?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Agnieszka Stankiewicz&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>WEB/JPA</category>
      <category>earth_distance</category>
      <category>jpa postgresql</category>
      <category>jpa postgresql extension</category>
      <category>jpa 위도 경도 범위</category>
      <category>ll_to_earth</category>
      <category>postgresql extension 스키마 지정</category>
      <category>postgresql extension 제거 방법</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/615</guid>
      <comments>https://seeminglyjs.tistory.com/615#entry615comment</comments>
      <pubDate>Mon, 8 Apr 2024 09:49:56 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트 이미지 preload 구현하기 이미지 변경 시 깜빡임 제거</title>
      <link>https://seeminglyjs.tistory.com/614</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-04-03&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;guillermo-ferla-0Qgtp8VPnpI-unsplash.jpg&quot; data-origin-width=&quot;2812&quot; data-origin-height=&quot;1972&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bycViu/btsFZEv7ZIo/ak83cmLyqGB0U1cd7Fk3V0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bycViu/btsFZEv7ZIo/ak83cmLyqGB0U1cd7Fk3V0/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Guillermo Ferla&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bycViu/btsFZEv7ZIo/ak83cmLyqGB0U1cd7Fk3V0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbycViu%2FbtsFZEv7ZIo%2Fak83cmLyqGB0U1cd7Fk3V0%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;553&quot; height=&quot;388&quot; data-filename=&quot;guillermo-ferla-0Qgtp8VPnpI-unsplash.jpg&quot; data-origin-width=&quot;2812&quot; data-origin-height=&quot;1972&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Guillermo Ferla&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;아래와 같이 코드를 구성하면 최초 페이지 접속 후 이미지가 지역변수에 담기게 되어 이후에 이미지 경로를 변경해도 깜빡임 현상을 제거할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1711082885336&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let images = []; //이미지 객체를 담을 변수
let imagesUrs = []; //동적이미지 url 정보르 담을 변수 실제 이미지 경로를 넣어주면 된다.


document.addEventListener('DOMContentLoaded', function () {
    function imgPreload() {
        for(let i = 0; i &amp;lt; imageUrls.length; i++) {
            images[i] = new Image();
            images[i].src = imageUrls[i];
        }
    }
    imgPreload()
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EA%B2%80%EC%9D%80-%ED%95%98%EB%8A%98-%ED%95%9C%EA%B0%80%EC%9A%B4%EB%8D%B0%EC%97%90-%EC%9E%88%EB%8A%94-%ED%8C%8C%EB%9E%80-%EB%AC%BC%EC%B2%B4-0Qgtp8VPnpI?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@gferla?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Guillermo Ferla&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>WEB/JavaScript</category>
      <category>background image preload</category>
      <category>css background 변경 시 이미지 깜빡임</category>
      <category>style.backgroundImage change 이미지 깜빡임</category>
      <category>자바스크립트 이미지 preload</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/614</guid>
      <comments>https://seeminglyjs.tistory.com/614#entry614comment</comments>
      <pubDate>Wed, 3 Apr 2024 09:51:41 +0900</pubDate>
    </item>
    <item>
      <title>Spring Security 에서 Authentication 의 isAuthenticated() 가 항상 true 인 이유</title>
      <link>https://seeminglyjs.tistory.com/613</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-04-01&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;nick-da-fonseca-O2OpVdGlP7w-unsplash.jpg&quot; data-origin-width=&quot;7810&quot; data-origin-height=&quot;4881&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RR5mu/btsFRjEC928/spjzh3McIpFfxGBNH0Krr0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RR5mu/btsFRjEC928/spjzh3McIpFfxGBNH0Krr0/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Nick Da Fonseca&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RR5mu/btsFRjEC928/spjzh3McIpFfxGBNH0Krr0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRR5mu%2FbtsFRjEC928%2Fspjzh3McIpFfxGBNH0Krr0%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;679&quot; height=&quot;424&quot; data-filename=&quot;nick-da-fonseca-O2OpVdGlP7w-unsplash.jpg&quot; data-origin-width=&quot;7810&quot; data-origin-height=&quot;4881&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Nick Da Fonseca&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 예시 코드&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;아래와 같은 코드가 있다고 가정해 보자. 해당 코드의 결과는 항상 로그인이 되어 있든 로그인이 되어 있지 않던 로그아웃을 하던&amp;nbsp; &lt;b&gt;&quot;if (authentication.isAuthenticated()) log.info(&quot;인증됨&quot;)&quot;&lt;/b&gt; 코드가 실행된다. 즉 &lt;b&gt;authentication.isAuthenticated()&lt;/b&gt; 이 부분이 항상 &lt;b&gt;true&lt;/b&gt;를 리턴한다. 그 이유는 무엇일까?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1710542028734&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        if (authentication.isAuthenticated())
            log.info(&quot;인증됨&quot;)
        else
            log.info(&quot;인증안됨&quot;)
    	}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. 원인&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Spring Security에서는 기본적으로 인증(로그인)되지 않은 사용자도 &lt;b&gt;'anonymousUser'&lt;/b&gt;로 인증되어 있다.&amp;nbsp; 이는 사용자가 로그인되지 않았더라도 Spring Security의 보안 기능을 활용할 수 있도록 하는 것이며, 이런 방식으로 Spring Security는 항상 SecurityContextHolder에 인증 객체를 유지하여 보다 일관된 방식으로 보안을 관리할 수 있다. isAuthenticated() 메서드는 현재 사용자가 인증되어 있는지 여부를 확인하며, Spring Security는 사용자가 'anonymousUser'로 인증되어 있더라도 이를 인증된 상태로 간주한다. 따라서 isAuthenticated() 메서드는 항상 true를 반환하게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;3. 코드 개선&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;그렇다면 익명 사용자가 아닌 실제 사용자가 로그인이 되어 있는지 안되어 있는지는 어떻게 체크하면 좋을까? 해당 코드에 한단계를 더 추가하면 된다. 바로 해당 유저가 익명 유저인지 여부를 확인하면 되는 것이다. 아래의 코드를 보자. 해당 유저가 &lt;b&gt;AnonymousAuthenticationToken&lt;/b&gt;를 가진 유저인지 여부를 확인하거나 아니면 해당 유저의 이름이 &lt;b&gt;'anonymousUser' &lt;/b&gt;인지 체크를 해주면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1710542444898&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        //authentication.getName().equals(&quot;anonymousUser&quot;)
        if (authentication != null &amp;amp;&amp;amp; authentication.isAuthenticated() &amp;amp;&amp;amp; !(authentication instanceof AnonymousAuthenticationToken)) {
            return true;
        } else {
            return false;
        }&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;3. 출처&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/26101738/why-is-the-anonymoususer-authenticated-in-spring-security&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://stackoverflow.com/questions/26101738/why-is-the-anonymoususer-authenticated-in-spring-security&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1710542170741&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;Why is the 'anonymousUser' authenticated in Spring Security?&quot; data-og-description=&quot;This is my main controller: package org.demian.demibox.controllers; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder;&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/26101738/why-is-the-anonymoususer-authenticated-in-spring-security&quot; data-og-url=&quot;https://stackoverflow.com/questions/26101738/why-is-the-anonymoususer-authenticated-in-spring-security&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hsG1P/hyVyj4wnh7/EFK0AFNUMIkpfrhba0im21/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/26101738/why-is-the-anonymoususer-authenticated-in-spring-security&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/26101738/why-is-the-anonymoususer-authenticated-in-spring-security&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hsG1P/hyVyj4wnh7/EFK0AFNUMIkpfrhba0im21/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&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;Why is the 'anonymousUser' authenticated in Spring Security?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;This is my main controller: package org.demian.demibox.controllers; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 :&amp;nbsp;사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EB%A9%80%EB%A6%AC-%ED%98%B8%EC%88%98%EA%B0%80-%EC%9E%88%EB%8A%94-%EC%82%B0%EB%A7%A5%EC%9D%98-%EC%A0%84%EB%A7%9D-O2OpVdGlP7w?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@nickdafonseca?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Nick Da Fonseca&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;</description>
      <category>WEB/Spring Security</category>
      <category>AnonymousAuthenticationToken</category>
      <category>anonymousUser</category>
      <category>SecurityContextHolder.getContext().getAuthentication()</category>
      <category>spring security 로그인 여부 체크</category>
      <category>uthentication.isAuthenticated()</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/613</guid>
      <comments>https://seeminglyjs.tistory.com/613#entry613comment</comments>
      <pubDate>Mon, 1 Apr 2024 09:45:02 +0900</pubDate>
    </item>
    <item>
      <title>자바 이미지 리사이징 및 비율 변경 하는 방법 알아보기</title>
      <link>https://seeminglyjs.tistory.com/612</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-03-29&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;nick-andreka-UArA9A02Kvk-unsplash.jpg&quot; data-origin-width=&quot;2160&quot; data-origin-height=&quot;2700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oSz3S/btsFE0NQIW1/a7VtWpp2Uk8qlNWWgomSP1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oSz3S/btsFE0NQIW1/a7VtWpp2Uk8qlNWWgomSP1/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Nick Andr&amp;amp;eacute;ka&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oSz3S/btsFE0NQIW1/a7VtWpp2Uk8qlNWWgomSP1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoSz3S%2FbtsFE0NQIW1%2Fa7VtWpp2Uk8qlNWWgomSP1%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;413&quot; height=&quot;516&quot; data-filename=&quot;nick-andreka-UArA9A02Kvk-unsplash.jpg&quot; data-origin-width=&quot;2160&quot; data-origin-height=&quot;2700&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Nick Andr&amp;eacute;ka&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1710157248376&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.awt.*;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;

public class ImageResizer {

    public static final int MAX_WIDTH = 1920;
    public static final int MAX_HEIGHT = 1080;

    // 이미지 크기 조정
    private BufferedImage resizeImage(BufferedImage originalImage) {
        int width = originalImage.getWidth();
        int height = originalImage.getHeight();

        // 이미지 크기가 최대 크기보다 큰 경우에만 크기를 조절
        if (width &amp;gt; MAX_WIDTH || height &amp;gt; MAX_HEIGHT) {
            // 이미지 크기를 조절하는 알고리즘 선택
            double scale = Math.min((double) MAX_WIDTH / width, (double) MAX_HEIGHT / height);
            int newWidth = (int) (width * scale);
            int newHeight = (int) (height * scale);

            // 이미지를 변환
            BufferedImage resizedImage = new BufferedImage(newWidth, newHeight, originalImage.getType());
            Graphics2D g = resizedImage.createGraphics();
            g.drawImage(originalImage, 0, 0, newWidth, newHeight, null);
            g.dispose();

            return resizedImage;
        }

        return originalImage; // 이미지 크기가 최대 크기보다 작으면 원본 이미지 반환
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EB%A8%B8%EB%A6%AC%EB%A5%BC-%EC%86%90%EC%97%90-%EC%A5%94-%EB%82%A8%EC%9E%90%EC%9D%98-%ED%9D%91%EB%B0%B1-%EC%82%AC%EC%A7%84-UArA9A02Kvk?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@nickandreka?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Nick Andr&amp;eacute;ka&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;</description>
      <category>Language/Java</category>
      <category>java image scale</category>
      <category>java 이미지 비율 변경</category>
      <category>이미지 리사이징</category>
      <category>자바 이미지 리사이징</category>
      <category>자바 이미지 비율</category>
      <category>자바 이미지 크기 변경</category>
      <category>자바 이미지 크기 조정</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/612</guid>
      <comments>https://seeminglyjs.tistory.com/612#entry612comment</comments>
      <pubDate>Fri, 29 Mar 2024 09:42:48 +0900</pubDate>
    </item>
    <item>
      <title>왜 woff2 를 써야하는가? otf / ttf 와의 차이</title>
      <link>https://seeminglyjs.tistory.com/611</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-03-27&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;vidar-nordli-mathisen-4Yt-M2-O92Y-unsplash.jpg&quot; data-origin-width=&quot;3240&quot; data-origin-height=&quot;2160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/prKHT/btsFzcsAMAX/zLVxTy9lfqWDFI5dVAgy5K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/prKHT/btsFzcsAMAX/zLVxTy9lfqWDFI5dVAgy5K/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Vidar Nordli-Mathisen&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/prKHT/btsFzcsAMAX/zLVxTy9lfqWDFI5dVAgy5K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FprKHT%2FbtsFzcsAMAX%2FzLVxTy9lfqWDFI5dVAgy5K%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;458&quot; height=&quot;305&quot; data-filename=&quot;vidar-nordli-mathisen-4Yt-M2-O92Y-unsplash.jpg&quot; data-origin-width=&quot;3240&quot; data-origin-height=&quot;2160&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Vidar Nordli-Mathisen&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 로딩 속도 향상&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;WOFF2는 TTF 또는 OTF보다 평균 파일의 크기가 30% 더 작다. 이로인해 페이지 로딩 속도를 높여 사용자 경험을 향상 시키고, 모바일 장치에서 데이터 사용량 감소에 도움이 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dKCN12/btsFvZU7dee/6yPcN7inElgRnnjuecNiKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dKCN12/btsFvZU7dee/6yPcN7inElgRnnjuecNiKk/img.png&quot; data-alt=&quot;https://getsnapfont.com/posts/understanding-font-file-formats-ttf-otf-woff-etc&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dKCN12/btsFvZU7dee/6yPcN7inElgRnnjuecNiKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdKCN12%2FbtsFvZU7dee%2F6yPcN7inElgRnnjuecNiKk%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;1024&quot; height=&quot;768&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://getsnapfont.com/posts/understanding-font-file-formats-ttf-otf-woff-etc&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. 향상된 텍스트 품질&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;WOFF2는 텍스트 렌더링을 위한 최적화 기능을 제공함으로써 더 선명하고 깨끗한 글꼴 표시를 제공한다. 특히 작은 글꼴 크기에서 더욱 눈에 띄는 차이를 경험할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;3. 브라우저 호환성&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;WOFF2는 모든 주요 웹 브라우저에서 지원된다. 사실상 모든 웹 사용자에게 최적의 텍스트 표시 경험을 제공할 수 있으며,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;TTF 또는 OTF와 달리 별도의 웹폰트 형식을 사용할 필요가 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;372&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PuZ6c/btsFz6FJ683/WD3KcreG90WiZTTiKyP3iK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PuZ6c/btsFz6FJ683/WD3KcreG90WiZTTiKyP3iK/img.png&quot; data-alt=&quot;https://heyakash.medium.com/understanding-of-font-formats-ttf-otf-woff-eot-svg-e55e00a1ef2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PuZ6c/btsFz6FJ683/WD3KcreG90WiZTTiKyP3iK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPuZ6c%2FbtsFz6FJ683%2FWD3KcreG90WiZTTiKyP3iK%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;680&quot; height=&quot;372&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;372&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://heyakash.medium.com/understanding-of-font-formats-ttf-otf-woff-eot-svg-e55e00a1ef2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;4. 출처&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://heyakash.medium.com/understanding-of-font-formats-ttf-otf-woff-eot-svg-e55e00a1ef2&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://heyakash.medium.com/understanding-of-font-formats-ttf-otf-woff-eot-svg-e55e00a1ef2&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1709639698736&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;Understanding of Font Formats: TTF, OTF, WOFF, EOT &amp;amp; SVG&quot; data-og-description=&quot;Ah, font formats! EOT, TTF, WOFF, SVG, WOFF2&amp;hellip; There are so many choices! Unfortunately, despite the huge variety of formats, there isn&amp;rsquo;t a&amp;hellip;&quot; data-og-host=&quot;heyakash.medium.com&quot; data-og-source-url=&quot;https://heyakash.medium.com/understanding-of-font-formats-ttf-otf-woff-eot-svg-e55e00a1ef2&quot; data-og-url=&quot;https://heyakash.medium.com/understanding-of-font-formats-ttf-otf-woff-eot-svg-e55e00a1ef2&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/SPiSw/hyVurgUOR4/aF6tovgdwre1TtODbFdTq0/img.jpg?width=680&amp;amp;height=280&amp;amp;face=0_0_680_280&quot;&gt;&lt;a href=&quot;https://heyakash.medium.com/understanding-of-font-formats-ttf-otf-woff-eot-svg-e55e00a1ef2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://heyakash.medium.com/understanding-of-font-formats-ttf-otf-woff-eot-svg-e55e00a1ef2&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/SPiSw/hyVurgUOR4/aF6tovgdwre1TtODbFdTq0/img.jpg?width=680&amp;amp;height=280&amp;amp;face=0_0_680_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;Understanding of Font Formats: TTF, OTF, WOFF, EOT &amp;amp; SVG&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Ah, font formats! EOT, TTF, WOFF, SVG, WOFF2&amp;hellip; There are so many choices! Unfortunately, despite the huge variety of formats, there isn&amp;rsquo;t a&amp;hellip;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;heyakash.medium.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://sgtype.com/blogs/magazine/otf-ttf-woff-font-format-difference&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://sgtype.com/blogs/magazine/otf-ttf-woff-font-format-difference&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1709639706251&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;OTF vs TTF vs WOFF: Which Font Format Is Better? What's the Difference&quot; data-og-description=&quot;Most fonts these days are either OTF, TTF or WOFF. But what does that mean? What are the differences between those font formats? Should you even care? And which format is better? In this article we will explain exactly what each font format is and tell you&quot; data-og-host=&quot;sgtype.com&quot; data-og-source-url=&quot;https://sgtype.com/blogs/magazine/otf-ttf-woff-font-format-difference&quot; data-og-url=&quot;https://sgtype.com/blogs/magazine/otf-ttf-woff-font-format-difference&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gCi5o/hyVuq99PZG/uq2RFWOgaVlcniKG8PLL5K/img.png?width=2000&amp;amp;height=2000&amp;amp;face=0_0_2000_2000&quot;&gt;&lt;a href=&quot;https://sgtype.com/blogs/magazine/otf-ttf-woff-font-format-difference&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://sgtype.com/blogs/magazine/otf-ttf-woff-font-format-difference&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gCi5o/hyVuq99PZG/uq2RFWOgaVlcniKG8PLL5K/img.png?width=2000&amp;amp;height=2000&amp;amp;face=0_0_2000_2000');&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;OTF vs TTF vs WOFF: Which Font Format Is Better? What's the Difference&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Most fonts these days are either OTF, TTF or WOFF. But what does that mean? What are the differences between those font formats? Should you even care? And which format is better? In this article we will explain exactly what each font format is and tell you&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;sgtype.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://getsnapfont.com/posts/understanding-font-file-formats-ttf-otf-woff-etc&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://getsnapfont.com/posts/understanding-font-file-formats-ttf-otf-woff-etc&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1709639757167&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;Understanding font file formats(ttf, otf, woff, etc) - Snapfont&quot; data-og-description=&quot;If you're a web designer, you may have heard of .ttf, .woff, .woff2 font formats. However when developing a website, what font format should you actually use? In this article I'll deconstruct font file formats and summarize which font formats should you us&quot; data-og-host=&quot;getsnapfont.com&quot; data-og-source-url=&quot;https://getsnapfont.com/posts/understanding-font-file-formats-ttf-otf-woff-etc&quot; data-og-url=&quot;https://getsnapfont.com/posts/understanding-font-file-formats-ttf-otf-woff-etc&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fblQo/hyVujQJ66G/Xtb2DkPoOUMFfPs01PTfk1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/0tq9H/hyVufgtCjZ/zLuN5LkPNt6yLqH33fc0XK/img.png?width=1024&amp;amp;height=768&amp;amp;face=0_0_1024_768,https://scrap.kakaocdn.net/dn/bdOIS8/hyVun6DXKH/t5OOeK5xokh7N1x61ODyLK/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://getsnapfont.com/posts/understanding-font-file-formats-ttf-otf-woff-etc&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://getsnapfont.com/posts/understanding-font-file-formats-ttf-otf-woff-etc&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fblQo/hyVujQJ66G/Xtb2DkPoOUMFfPs01PTfk1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/0tq9H/hyVufgtCjZ/zLuN5LkPNt6yLqH33fc0XK/img.png?width=1024&amp;amp;height=768&amp;amp;face=0_0_1024_768,https://scrap.kakaocdn.net/dn/bdOIS8/hyVun6DXKH/t5OOeK5xokh7N1x61ODyLK/img.jpg?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;Understanding font file formats(ttf, otf, woff, etc) - Snapfont&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;If you're a web designer, you may have heard of .ttf, .woff, .woff2 font formats. However when developing a website, what font format should you actually use? In this article I'll deconstruct font file formats and summarize which font formats should you us&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;getsnapfont.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EC%A7%91%EC%9D%84-%EB%B0%B0%EA%B2%BD%EC%9C%BC%EB%A1%9C-%ED%95%9C-%EA%BD%83%EB%B0%AD-4Yt-M2-O92Y?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@vidarnm?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Vidar Nordli-Mathisen&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;</description>
      <category>IT/개발상식</category>
      <category>OTF</category>
      <category>otf vs ttf</category>
      <category>ttf</category>
      <category>WOFF2</category>
      <category>폰트 사이즈</category>
      <category>폰트 형식 비교</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/611</guid>
      <comments>https://seeminglyjs.tistory.com/611#entry611comment</comments>
      <pubDate>Wed, 27 Mar 2024 09:01:06 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트 File to Base64 | Base64 to File 구현하기</title>
      <link>https://seeminglyjs.tistory.com/610</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-03-25&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;neom-HYHYGLs-Rp8-unsplash.jpg&quot; data-origin-width=&quot;8640&quot; data-origin-height=&quot;5760&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjRyia/btsFm334yi6/XXri9hxA6xlqnbiSGppT60/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjRyia/btsFm334yi6/XXri9hxA6xlqnbiSGppT60/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjRyia/btsFm334yi6/XXri9hxA6xlqnbiSGppT60/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjRyia%2FbtsFm334yi6%2FXXri9hxA6xlqnbiSGppT60%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;543&quot; height=&quot;362&quot; data-filename=&quot;neom-HYHYGLs-Rp8-unsplash.jpg&quot; data-origin-width=&quot;8640&quot; data-origin-height=&quot;5760&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;File&amp;nbsp;to&amp;nbsp;Base64&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;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;전달받은 파일 정보를 &lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;FileReader로 읽어 들여 base64 문자열을 만드는 코드이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1709164637678&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//실제 파일을 base64로 변환하는 코드 
function fileToBase64(file) {
  return new Promise((resolve, reject) =&amp;gt; {
    const reader = new FileReader();
    
    reader.onerror = () =&amp;gt; {
      reader.abort();
      reject(new Error('파일을 읽는 도중 오류가 발생했습니다.'));
    };
    
    reader.onload = () =&amp;gt; {
      resolve(reader.result);
    };

    reader.readAsDataURL(file);
  });
}

// 사용 예제
async function processFile(file) {
  try {
    const base64Data = await fileToBase64(file);
    //base64Data.result
    console.log(base64Data);
  } catch (error) {
    console.error(error);
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Base64&amp;nbsp;to&amp;nbsp;File&amp;nbsp;&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;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;매개 변수로는 Base64 로 인코딩된 이미지 파일 정보와 / 파일명 / 파일 타입을 매개 변수로 받는다.&amp;nbsp; Base64 문자열을 우선 atob로 변경한 후 해당 루프를 돌면서 Uint8 Array에 담은 후 파일로 변환하는 방식이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1709164182550&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function base64ToFile(base64String, fileName, fileType) {
    let atobObj = atob(base64String),
        n = atobObj.length,
        u8arr = new Uint8Array(n);
    while(n--){
        u8arr[n] = atobObj.charCodeAt(n);
    }
    // File 객체 생성
    return new File([u8arr], fileName, {type: fileType});
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%ED%98%95%ED%98%95%EC%83%89%EC%83%89%EC%9D%98-%EC%82%B0%ED%98%B8%EC%B4%88%EC%9D%98-%EC%88%98%EC%A4%91-%ED%92%8D%EA%B2%BD-HYHYGLs-Rp8?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@neom?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;NEOM&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>WEB/JavaScript</category>
      <category>atob</category>
      <category>FileReader</category>
      <category>자바스크립트 Base64 to File</category>
      <category>자바스크립트 File to Base64</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/610</guid>
      <comments>https://seeminglyjs.tistory.com/610#entry610comment</comments>
      <pubDate>Mon, 25 Mar 2024 09:02:25 +0900</pubDate>
    </item>
    <item>
      <title>Flutter internation&amp;shy;alized 설정 하는 법 Flutter_localizations</title>
      <link>https://seeminglyjs.tistory.com/609</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-03-20&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;travis-leery-E4BKNmb31fA-unsplash.jpg&quot; data-origin-width=&quot;7304&quot; data-origin-height=&quot;4912&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpEtD9/btsFgrRQwH7/3xm8xS603hfY9P05esjHv0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpEtD9/btsFgrRQwH7/3xm8xS603hfY9P05esjHv0/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Travis Leery&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpEtD9/btsFgrRQwH7/3xm8xS603hfY9P05esjHv0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpEtD9%2FbtsFgrRQwH7%2F3xm8xS603hfY9P05esjHv0%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;612&quot; height=&quot;412&quot; data-filename=&quot;travis-leery-E4BKNmb31fA-unsplash.jpg&quot; data-origin-width=&quot;7304&quot; data-origin-height=&quot;4912&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Travis Leery&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left; font-family: 'Noto Serif KR';&quot;&gt;pubspec.yml의 아래와 같이 의존관계 추가&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1708846766216&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter
  intl: any&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;main.dart 에 아래와 같이 localizations 설정 정보를 작성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1708846798800&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;return const MaterialApp(
  title: 'Localizations Sample App',
  localizationsDelegates: [
    GlobalMaterialLocalizations.delegate,
    GlobalWidgetsLocalizations.delegate,
    GlobalCupertinoLocalizations.delegate,
  ],
  supportedLocales: [
    Locale('en'), // English
    Locale('es'), // Spanish
  ],
  home: MyHomePage(),
);&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이후 아래와 같이 현재 위젯 기준으로&amp;nbsp; 현재의 언어 정보 확인이 가능해진다. ex) en / ja / ko&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1708846910610&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    final locale = Localizations.localeOf(context);
    final languageCode = locale.languageCode;
    print(languageCode)&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. 참고&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://flutter-ko.dev/development/accessibility-and-localization/internationalization&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://flutter-ko.dev/development/accessibility-and-localization/internationalization&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1708846736036&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;Internationalizing Flutter apps&quot; data-og-description=&quot;How to internationalize your Flutter app.&quot; data-og-host=&quot;docs.flutter.dev&quot; data-og-source-url=&quot;https://flutter-ko.dev/development/accessibility-and-localization/internationalization&quot; data-og-url=&quot;https://docs.flutter.dev/development/accessibility-and-localization/internationalization&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/emxlq2/hyVqwn45fk/d7fi96Wionyrq1D1Ki8nG0/img.png?width=937&amp;amp;height=461&amp;amp;face=0_0_937_461&quot;&gt;&lt;a href=&quot;https://flutter-ko.dev/development/accessibility-and-localization/internationalization&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://flutter-ko.dev/development/accessibility-and-localization/internationalization&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/emxlq2/hyVqwn45fk/d7fi96Wionyrq1D1Ki8nG0/img.png?width=937&amp;amp;height=461&amp;amp;face=0_0_937_461');&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;Internationalizing Flutter apps&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;How to internationalize your Flutter app.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.flutter.dev&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://api.flutter.dev/flutter/widgets/Localizations/localeOf.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://api.flutter.dev/flutter/widgets/Localizations/localeOf.html&lt;/a&gt;\&lt;/p&gt;
&lt;figure id=&quot;og_1708846982230&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;localeOf method - Localizations class - widgets library - Dart API&quot; data-og-description=&quot;Locale localeOf(BuildContext context ) The locale of the Localizations widget for the widget tree that corresponds to BuildContext context. If no Localizations widget is in scope then the Localizations.localeOf method will throw an exception. Implementatio&quot; data-og-host=&quot;api.flutter.dev&quot; data-og-source-url=&quot;https://api.flutter.dev/flutter/widgets/Localizations/localeOf.html&quot; data-og-url=&quot;https://api.flutter.dev/flutter/widgets/Localizations/localeOf.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://api.flutter.dev/flutter/widgets/Localizations/localeOf.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://api.flutter.dev/flutter/widgets/Localizations/localeOf.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;localeOf method - Localizations class - widgets library - Dart API&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Locale localeOf(BuildContext context ) The locale of the Localizations widget for the widget tree that corresponds to BuildContext context. If no Localizations widget is in scope then the Localizations.localeOf method will throw an exception. Implementatio&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;api.flutter.dev&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%ED%95%91%ED%81%AC-%ED%94%8C%EB%9D%BC%EB%B0%8D%EA%B3%A0%EC%9D%98-%EA%B9%83%ED%84%B8-%ED%81%B4%EB%A1%9C%EC%A6%88%EC%97%85-E4BKNmb31fA?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@jersey_photos?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Travis Leery&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>App/Flutter</category>
      <category>final languageCode = locale.languageCode;</category>
      <category>Flutter internation&amp;shy;alized</category>
      <category>Flutter_localizations</category>
      <category>GlobalCupertinoLocalizations.delegate</category>
      <category>GlobalMaterialLocalizations.delegate</category>
      <category>GlobalWidgetsLocalizations.delegate</category>
      <category>Localizations.localeOf(context);</category>
      <category>localizationsDelegates</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/609</guid>
      <comments>https://seeminglyjs.tistory.com/609#entry609comment</comments>
      <pubDate>Wed, 20 Mar 2024 09:45:41 +0900</pubDate>
    </item>
    <item>
      <title>Builder 형식의 Data 클래스 필드값 Default 설정하는 방법</title>
      <link>https://seeminglyjs.tistory.com/608</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-03-18&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;pawel-czerwinski-ra6QRtk7D_4-unsplash.jpg&quot; data-origin-width=&quot;8400&quot; data-origin-height=&quot;5600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsFqCo/btsFbh8OcA6/xhdT4KYgB4mCcUYM9MVLLk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsFqCo/btsFbh8OcA6/xhdT4KYgB4mCcUYM9MVLLk/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Pawel Czerwinski&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsFqCo/btsFbh8OcA6/xhdT4KYgB4mCcUYM9MVLLk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsFqCo%2FbtsFbh8OcA6%2FxhdT4KYgB4mCcUYM9MVLLk%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;497&quot; height=&quot;331&quot; data-filename=&quot;pawel-czerwinski-ra6QRtk7D_4-unsplash.jpg&quot; data-origin-width=&quot;8400&quot; data-origin-height=&quot;5600&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Pawel Czerwinski&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;@Builder.Default&lt;/b&gt; 를 사용하여&amp;nbsp; &lt;span style=&quot;background-color: #ffffff;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;TestDataClass.builder().build() 와 같은 형식으로 선언해도 아래처럼 정의된 값들이 들어가게 할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1708501341156&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Arrays;
import java.util.List;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TestDataClass {

    @Builder.Default
    private String name = &quot;king&quot;;

    @Builder.Default
    private List&amp;lt;String&amp;gt; names = Arrays.asList(&quot;you&quot;, &quot;hey&quot;, &quot;wow&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. 참고&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://www.baeldung.com/lombok-builder-default-value&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.baeldung.com/lombok-builder-default-value&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1708501487115&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;Lombok Builder with Default Value | Baeldung&quot; data-og-description=&quot;Learn how to create a builder default property values using Lombok&quot; data-og-host=&quot;www.baeldung.com&quot; data-og-source-url=&quot;https://www.baeldung.com/lombok-builder-default-value&quot; data-og-url=&quot;https://www.baeldung.com/lombok-builder-default-value&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c0lTjJ/hyVmSyO65y/eURLVpDdFhAjFctO6dKO40/img.jpg?width=952&amp;amp;height=498&amp;amp;face=0_0_952_498,https://scrap.kakaocdn.net/dn/SpCg3/hyVmXfOOH3/oKSMIqW4y0i5iC5FzkhFxk/img.jpg?width=952&amp;amp;height=498&amp;amp;face=0_0_952_498&quot;&gt;&lt;a href=&quot;https://www.baeldung.com/lombok-builder-default-value&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.baeldung.com/lombok-builder-default-value&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c0lTjJ/hyVmSyO65y/eURLVpDdFhAjFctO6dKO40/img.jpg?width=952&amp;amp;height=498&amp;amp;face=0_0_952_498,https://scrap.kakaocdn.net/dn/SpCg3/hyVmXfOOH3/oKSMIqW4y0i5iC5FzkhFxk/img.jpg?width=952&amp;amp;height=498&amp;amp;face=0_0_952_498');&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;Lombok Builder with Default Value | Baeldung&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Learn how to create a builder default property values using Lombok&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.baeldung.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%ED%8C%8C%EB%9E%80%EC%83%89%EA%B3%BC-%ED%9D%B0%EC%83%89-%EC%A7%81%EB%AC%BC%EC%9D%98-%ED%81%B4%EB%A1%9C%EC%A6%88%EC%97%85-ra6QRtk7D_4?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@pawel_czerwinski?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Pawel Czerwinski&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>WEB/Spring</category>
      <category>@Builder.Default</category>
      <category>estDataClass.builder().build()</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/608</guid>
      <comments>https://seeminglyjs.tistory.com/608#entry608comment</comments>
      <pubDate>Mon, 18 Mar 2024 09:45:58 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트 Object 크기 확인 하는 방법</title>
      <link>https://seeminglyjs.tistory.com/607</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-03-13&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;sies-kranen-76Kcn81By9Q-unsplash.jpg&quot; data-origin-width=&quot;6000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dBEfdE/btsEY9q6OU8/nYAwnHTe0reFJQtPW272iK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dBEfdE/btsEY9q6OU8/nYAwnHTe0reFJQtPW272iK/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Sies Kranen&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dBEfdE/btsEY9q6OU8/nYAwnHTe0reFJQtPW272iK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdBEfdE%2FbtsEY9q6OU8%2FnYAwnHTe0reFJQtPW272iK%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;567&quot; height=&quot;378&quot; data-filename=&quot;sies-kranen-76Kcn81By9Q-unsplash.jpg&quot; data-origin-width=&quot;6000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Sies Kranen&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Object.keys(obj).length 통해 전체 키를 추출해서 사이즈를 확인하는 방법이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1708389577364&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const obj = {
  key1: 'value1',
  key2: 'value2',
  key3: 'value3'
};

const keyCount = Object.keys(obj).length;
console.log(keyCount); // 객체 obj에는 3개의 키-값 쌍이 있음&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EA%B1%B4%EB%AC%BC-%EC%B8%A1%EB%A9%B4%EC%97%90-%EC%9E%88%EB%8A%94-%EC%8B%9C%EA%B3%84-76Kcn81By9Q?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@sinusfiction?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Sies Kranen&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>WEB/JavaScript</category>
      <category>Object.keys(obj).length</category>
      <category>자바스크립트 Object 크기 확인</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/607</guid>
      <comments>https://seeminglyjs.tistory.com/607#entry607comment</comments>
      <pubDate>Wed, 13 Mar 2024 09:43:01 +0900</pubDate>
    </item>
    <item>
      <title>input 태그 커서 없애는 방법 how to remove blinking input?</title>
      <link>https://seeminglyjs.tistory.com/606</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-03-11&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;neom-kirkdJn_jEk-unsplash.jpg&quot; data-origin-width=&quot;5553&quot; data-origin-height=&quot;8330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qcY3s/btsE3oHwRiY/ik9IHydSp9ijS9Hgy0KHA0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qcY3s/btsE3oHwRiY/ik9IHydSp9ijS9Hgy0KHA0/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 NEOM&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qcY3s/btsE3oHwRiY/ik9IHydSp9ijS9Hgy0KHA0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqcY3s%2FbtsE3oHwRiY%2Fik9IHydSp9ijS9Hgy0KHA0%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;329&quot; height=&quot;494&quot; data-filename=&quot;neom-kirkdJn_jEk-unsplash.jpg&quot; data-origin-width=&quot;5553&quot; data-origin-height=&quot;8330&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 NEOM&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;inupt 태그 속성에서 caret-color: transparent; 해당 부분만 추가하면 커서가 블링크 되는 것을 지울 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1708387368508&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;caret-color: transparent;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. 출처&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/9333044/how-to-hide-blinking-cursor-in-input-text&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://stackoverflow.com/questions/9333044/how-to-hide-blinking-cursor-in-input-text&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1708387356758&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;how to hide blinking cursor in input text?&quot; data-og-description=&quot;I want to make something which would look like a select input but is actually not, here are the steps. I made an &amp;lt;input type=&amp;quot;text&amp;quot;&amp;gt;. I added a background-image, which will show a &amp;quot;select a...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/9333044/how-to-hide-blinking-cursor-in-input-text&quot; data-og-url=&quot;https://stackoverflow.com/questions/9333044/how-to-hide-blinking-cursor-in-input-text&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/btfAt0/hyVm4S8kw8/rltDKJ8TksQt8k9ixe9yB0/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316,https://scrap.kakaocdn.net/dn/c5B6aW/hyVm4lfktp/DAmaAprdhjka2D3lYIzJhK/img.jpg?width=722&amp;amp;height=762&amp;amp;face=0_0_722_762&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/9333044/how-to-hide-blinking-cursor-in-input-text&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/9333044/how-to-hide-blinking-cursor-in-input-text&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/btfAt0/hyVm4S8kw8/rltDKJ8TksQt8k9ixe9yB0/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316,https://scrap.kakaocdn.net/dn/c5B6aW/hyVm4lfktp/DAmaAprdhjka2D3lYIzJhK/img.jpg?width=722&amp;amp;height=762&amp;amp;face=0_0_722_762');&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;how to hide blinking cursor in input text?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I want to make something which would look like a select input but is actually not, here are the steps. I made an &amp;lt;input type=&quot;text&quot;&amp;gt;. I added a background-image, which will show a &quot;select a...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EC%82%AC%EB%A7%89-%ED%95%9C%EA%B0%80%EC%9A%B4%EB%8D%B0%EC%97%90-%EC%84%9C-%EC%9E%88%EB%8A%94-%EC%82%AC%EB%9E%8C-kirkdJn_jEk?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@neom?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;NEOM&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>WEB/HTML</category>
      <category>caret-color: transparent;</category>
      <category>input cursor remove</category>
      <category>input tag blinking remove</category>
      <category>input 태그 커서 없애는 방법</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/606</guid>
      <comments>https://seeminglyjs.tistory.com/606#entry606comment</comments>
      <pubDate>Mon, 11 Mar 2024 09:04:43 +0900</pubDate>
    </item>
    <item>
      <title>firebase &amp;quot;다른 프로젝트에 이미 패키지 이름과 SHA-1이 동일한 OAuth2 클라이언트가 있습니다. &amp;quot; 해결방법 SHA 인증서 지문 생성</title>
      <link>https://seeminglyjs.tistory.com/605</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-03-08&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;gonzalo-facello-TLb0Sax_oZI-unsplash.jpg&quot; data-origin-width=&quot;3674&quot; data-origin-height=&quot;5511&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFHbEC/btsEYITQu2h/4jLzFDfNI82p7tnN31euO0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFHbEC/btsEYITQu2h/4jLzFDfNI82p7tnN31euO0/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Gonzalo Facello&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFHbEC/btsEYITQu2h/4jLzFDfNI82p7tnN31euO0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFHbEC%2FbtsEYITQu2h%2F4jLzFDfNI82p7tnN31euO0%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;381&quot; height=&quot;572&quot; data-filename=&quot;gonzalo-facello-TLb0Sax_oZI-unsplash.jpg&quot; data-origin-width=&quot;3674&quot; data-origin-height=&quot;5511&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Gonzalo Facello&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 원인&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이미 프로젝트 중 동일한&amp;nbsp;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;SHA 인증서 지문을 사용하여 생기는 문제이다.&amp;nbsp; &lt;b&gt;/.android/debug.keystore&lt;/b&gt; 를 이미 dev 또는 test라는 명목으로 사용하여 생기는 문제일 가능성이 높다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. 해결 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;해결 방법은 크게 어렵지 않다. 아래의 명령어로 새로운 키를 만들어 SHA 인증서를 추출하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;~/upload-keystore.jks : 자신 저장할 위치와 파일명으로 변환&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;-alias upload : 별칭 역시 자신이 원하는 내용으로 변환&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1708176471432&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;keytool -genkey -v -keystore ~/upload-keystore.jks -keyalg RSA \
        -keysize 2048 -validity 10000 -alias upload&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;위의 명령어를 사용하면 여러가지 입력하라고 나오는데, 자신의 프로젝트에 맞게 입력하면 된다. 마지막에 &lt;b&gt;corret?&lt;/b&gt;에서 &lt;b&gt;yes&lt;/b&gt;를 입력하지 않고 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;그냥 enter를 누르면 처음부터 다시 입력해야 하니 주의하자&lt;/b&gt;.&lt;/span&gt; &lt;b&gt;비밀번호&lt;/b&gt;는 추후에 SHA 인증서 출력할때 다시 입력해야 하니 잘 기억해 두어야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;994&quot; data-origin-height=&quot;272&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUsVSD/btsEYXC8LEJ/LedNvGjd3q9ErrknI2YnK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUsVSD/btsEYXC8LEJ/LedNvGjd3q9ErrknI2YnK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUsVSD/btsEYXC8LEJ/LedNvGjd3q9ErrknI2YnK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUsVSD%2FbtsEYXC8LEJ%2FLedNvGjd3q9ErrknI2YnK0%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;994&quot; height=&quot;272&quot; data-origin-width=&quot;994&quot; data-origin-height=&quot;272&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이후 아래 명령어를 통해 &lt;span style=&quot;color: #000000; text-align: left;&quot;&gt;SHA 지문을 출력할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;~/. android/debug.keystore : 방금 저장해 둔 경로 및 파일명 대입&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;-alias androiddebugkey : 아까 정해둔 별칭으로 변환&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1708176711243&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;keytool -list -v \
-alias androiddebugkey -keystore ~/.android/debug.keystore&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;터미널에 아래와 같이 나오면 성공이다. 이후 firebase 해당 정보를 인증서 정보에 등록하면 완료다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;55&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4hDmm/btsEXpmN4mq/zX0Gw2ifmHvpG58NXaT6p0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4hDmm/btsEXpmN4mq/zX0Gw2ifmHvpG58NXaT6p0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4hDmm/btsEXpmN4mq/zX0Gw2ifmHvpG58NXaT6p0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4hDmm%2FbtsEXpmN4mq%2FzX0Gw2ifmHvpG58NXaT6p0%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;820&quot; height=&quot;55&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;55&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;3. 출처&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://docs.flutter.dev/deployment/android&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.flutter.dev/deployment/android&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1708176430407&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;Build and release an Android app&quot; data-og-description=&quot;How to prepare for and release an Android app to the Play store.&quot; data-og-host=&quot;docs.flutter.dev&quot; data-og-source-url=&quot;https://docs.flutter.dev/deployment/android&quot; data-og-url=&quot;https://docs.flutter.dev/deployment/android&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cukVyf/hyVjf9grhZ/y2cn5KfDS8aaKmzPOdn74K/img.png?width=937&amp;amp;height=461&amp;amp;face=0_0_937_461,https://scrap.kakaocdn.net/dn/LEzZW/hyVjgG8ioR/UI8t6MkoPexGhHWYkzYvA0/img.png?width=1902&amp;amp;height=568&amp;amp;face=0_0_1902_568,https://scrap.kakaocdn.net/dn/ipSQl/hyVmQ7OzFc/tKSx4Bvmzlqb2FfKMj64Yk/img.png?width=1558&amp;amp;height=422&amp;amp;face=0_0_1558_422&quot;&gt;&lt;a href=&quot;https://docs.flutter.dev/deployment/android&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.flutter.dev/deployment/android&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cukVyf/hyVjf9grhZ/y2cn5KfDS8aaKmzPOdn74K/img.png?width=937&amp;amp;height=461&amp;amp;face=0_0_937_461,https://scrap.kakaocdn.net/dn/LEzZW/hyVjgG8ioR/UI8t6MkoPexGhHWYkzYvA0/img.png?width=1902&amp;amp;height=568&amp;amp;face=0_0_1902_568,https://scrap.kakaocdn.net/dn/ipSQl/hyVmQ7OzFc/tKSx4Bvmzlqb2FfKMj64Yk/img.png?width=1558&amp;amp;height=422&amp;amp;face=0_0_1558_422');&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;Build and release an Android app&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;How to prepare for and release an Android app to the Play store.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.flutter.dev&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://developers.google.com/android/guides/client-auth?hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://developers.google.com/android/guides/client-auth?hl=ko&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1708176672092&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;클라이언트 인증 &amp;nbsp;|&amp;nbsp; Google Play services &amp;nbsp;|&amp;nbsp; Google for Developers&quot; data-og-description=&quot;이 페이지는 Cloud Translation API를 통해 번역되었습니다. 클라이언트 인증 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 특정 Google Play 서비스 (예: Google 로그&quot; data-og-host=&quot;developers.google.com&quot; data-og-source-url=&quot;https://developers.google.com/android/guides/client-auth?hl=ko&quot; data-og-url=&quot;https://developers.google.com/android/guides/client-auth?hl=ko&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fpmIa/hyVmTcoh8Z/xuOBkX7XgqgS5CnBZ59k1k/img.png?width=1200&amp;amp;height=675&amp;amp;face=0_0_1200_675&quot;&gt;&lt;a href=&quot;https://developers.google.com/android/guides/client-auth?hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developers.google.com/android/guides/client-auth?hl=ko&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fpmIa/hyVmTcoh8Z/xuOBkX7XgqgS5CnBZ59k1k/img.png?width=1200&amp;amp;height=675&amp;amp;face=0_0_1200_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;클라이언트 인증 &amp;nbsp;|&amp;nbsp; Google Play services &amp;nbsp;|&amp;nbsp; Google for Developers&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이 페이지는 Cloud Translation API를 통해 번역되었습니다. 클라이언트 인증 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 특정 Google Play 서비스 (예: Google 로그&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developers.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EC%B4%88%EB%A1%9D%EC%83%89-%EB%AC%B8%EA%B3%BC-%EC%B0%BD%EB%AC%B8%EC%9D%B4-%EC%9E%88%EB%8A%94-%EA%B1%B4%EB%AC%BC-TLb0Sax_oZI?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@gonchifacello?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Gonzalo Facello&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>App/Firebase</category>
      <category>keytool</category>
      <category>~/. android/debug.keystore</category>
      <category>다른 프로젝트에 이미 패키지 이름과 SHA-1이 동일한 OAuth2 클라이언트가 있습니다.</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/605</guid>
      <comments>https://seeminglyjs.tistory.com/605#entry605comment</comments>
      <pubDate>Fri, 8 Mar 2024 09:40:55 +0900</pubDate>
    </item>
    <item>
      <title>thymeleaf 에서 th:fragment 에 매개변수 넣는법</title>
      <link>https://seeminglyjs.tistory.com/604</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-03-06&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;pavel-golasowski-wyoqwnBOSB8-unsplash.jpg&quot; data-origin-width=&quot;5700&quot; data-origin-height=&quot;4275&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nZc3u/btsETo84wwF/WguoTrLIBvBYjhWTZKcIs0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nZc3u/btsETo84wwF/WguoTrLIBvBYjhWTZKcIs0/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Pavel Golasowski&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nZc3u/btsETo84wwF/WguoTrLIBvBYjhWTZKcIs0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnZc3u%2FbtsETo84wwF%2FWguoTrLIBvBYjhWTZKcIs0%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;563&quot; height=&quot;422&quot; data-filename=&quot;pavel-golasowski-wyoqwnBOSB8-unsplash.jpg&quot; data-origin-width=&quot;5700&quot; data-origin-height=&quot;4275&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Pavel Golasowski&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;th:frgment를 호출할 th:replace&amp;nbsp; 파트&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1708040993175&quot; class=&quot;css&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;css&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;test_wrap&quot;
     th:replace=&quot;~{${'test.html'} :: testWrapFragment(value1=${value1})}&quot;&amp;gt;
&amp;lt;/div&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;span style=&quot;color: #666666; text-align: left; font-family: 'Noto Serif KR';&quot;&gt;호출할 th:frgment 이름 뒤에 괄호를 붙인뒤&lt;b&gt;(매개변수명=${백엔드에서 넘긴 변수})&lt;/b&gt; 를 같이 전달하면&amp;nbsp; th:frgment에&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;th:frgment 부분&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;&lt;span style=&quot;color: #666666; text-align: left; font-family: 'Noto Serif KR';&quot;&gt;th:frgment에서는&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1708041075604&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;test_wrap&quot; th:fragment=&quot;testWrapFragment&quot;&amp;gt;
    &amp;lt;div th:if=&quot;${value1 == 'a'}&quot;&amp;gt;
		value1 is a
    &amp;lt;/div&amp;gt;
    &amp;lt;div th:if=&quot;${value1 == 'b'}&quot;&amp;gt;
		value1 is b
    &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EB%8F%84%EC%8B%9C-%EC%8A%A4%EC%B9%B4%EC%9D%B4%EB%9D%BC%EC%9D%B8%EC%9D%B4-%EB%AC%BC-%ED%95%9C%EA%B0%80%EC%9A%B4%EB%8D%B0%EC%97%90-%ED%91%9C%EC%8B%9C%EB%90%A9%EB%8B%88%EB%8B%A4-wyoqwnBOSB8?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@golypal?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Pavel Golasowski&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>WEB/Thymeleaf</category>
      <category>th:fragment 변수 전달</category>
      <category>th:fragment 에 매개변수 넣는법</category>
      <category>th:frgment</category>
      <category>th:replace</category>
      <category>thymeleaf</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/604</guid>
      <comments>https://seeminglyjs.tistory.com/604#entry604comment</comments>
      <pubDate>Wed, 6 Mar 2024 09:58:15 +0900</pubDate>
    </item>
    <item>
      <title>HTML input 태그 커스텀 디자인 해보기 NO JavaScript!!!</title>
      <link>https://seeminglyjs.tistory.com/603</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-01-02&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;marek-piwnicki-fdo3fsGEyvU-unsplash.jpg&quot; data-origin-width=&quot;5037&quot; data-origin-height=&quot;2833&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3PdS2/btsEQdsU5KK/JjZu73HqPTE8HPoeBHOBk1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3PdS2/btsEQdsU5KK/JjZu73HqPTE8HPoeBHOBk1/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Marek Piwnicki&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3PdS2/btsEQdsU5KK/JjZu73HqPTE8HPoeBHOBk1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3PdS2%2FbtsEQdsU5KK%2FJjZu73HqPTE8HPoeBHOBk1%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;533&quot; height=&quot;300&quot; data-filename=&quot;marek-piwnicki-fdo3fsGEyvU-unsplash.jpg&quot; data-origin-width=&quot;5037&quot; data-origin-height=&quot;2833&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Marek Piwnicki&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. HTML&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1707900748085&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;search_wrap&quot;&amp;gt;
  &amp;lt;input type=&quot;text&quot; class=&quot;search_txt&quot;
         placeholder=&quot;상세 정보 입력 1&quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;br&amp;gt;
&amp;lt;div class=&quot;search_wrap&quot;&amp;gt;
  &amp;lt;input type=&quot;text&quot; class=&quot;search_txt&quot;
         placeholder=&quot;상세 정보 입력 2&quot;&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. CSS&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1707900768017&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* input태그디자인 참고*/
.search_wrap {
    display: flex;
    width: 100%;
    padding: 0.625rem;
    align-items: center;
    gap: 0.625rem;
    border-radius: 0.75rem;
    border: 1px solid #DBDBDB;
    background: #FFF;

    box-sizing: border-box;
}

.search_txt, /* 여기서 시작 */

input[type=&quot;text&quot;].search_txt {
    border: none;
    outline: none;
    color: #353535; /* 입력된 텍스트 색상 */
    background: transparent;
    font-size: inherit;
    padding: 0;
    margin: 0;
    width: 100%;
}

input[type=&quot;text&quot;].search_txt::placeholder {
    color: #BABABA; /* Placeholder 색상 */
}
/********************/&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EC%82%B0%EB%A7%A5-%EB%84%88%EB%A8%B8%EB%A1%9C-%ED%95%B4%EA%B0%80-%EC%A7%80%EA%B3%A0-%EC%9E%88%EB%8B%A4-fdo3fsGEyvU?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@marekpiwnicki?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Marek Piwnicki&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>WEB/HTML</category>
      <category>html input</category>
      <category>input 태그 디자인</category>
      <category>input 태그 수정</category>
      <category>input 태그 커스텀</category>
      <category>자바스크립트 없이 input 태그 수정</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/603</guid>
      <comments>https://seeminglyjs.tistory.com/603#entry603comment</comments>
      <pubDate>Mon, 4 Mar 2024 09:55:44 +0900</pubDate>
    </item>
    <item>
      <title>Spring boot profile 설정 방법 [properties 기준]</title>
      <link>https://seeminglyjs.tistory.com/602</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-02-27&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;thimo-van-leeuwen-6pVMAjyGCPw-unsplash.jpg&quot; data-origin-width=&quot;5568&quot; data-origin-height=&quot;3712&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cV4xgA/btsEHJSjdAA/LR6gShJ0tVhEdEKRN7Y8MK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cV4xgA/btsEHJSjdAA/LR6gShJ0tVhEdEKRN7Y8MK/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Thimo van Leeuwen&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cV4xgA/btsEHJSjdAA/LR6gShJ0tVhEdEKRN7Y8MK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcV4xgA%2FbtsEHJSjdAA%2FLR6gShJ0tVhEdEKRN7Y8MK%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;486&quot; height=&quot;324&quot; data-filename=&quot;thimo-van-leeuwen-6pVMAjyGCPw-unsplash.jpg&quot; data-origin-width=&quot;5568&quot; data-origin-height=&quot;3712&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Thimo van Leeuwen&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 준비&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;우선 자신의 개발 환경에 맞게 properties를 생성해 준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;338&quot; data-origin-height=&quot;83&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WVmAS/btsEGhWikPc/1p8pd5E3HGWlOCu98pLkek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WVmAS/btsEGhWikPc/1p8pd5E3HGWlOCu98pLkek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WVmAS/btsEGhWikPc/1p8pd5E3HGWlOCu98pLkek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWVmAS%2FbtsEGhWikPc%2F1p8pd5E3HGWlOCu98pLkek%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;338&quot; height=&quot;83&quot; data-origin-width=&quot;338&quot; data-origin-height=&quot;83&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;네이밍은 위와 같이 &lt;b&gt;application-[개발환경].properties&lt;/b&gt;의 형식으로 만들어주어야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;현재 프로파일이 어떤 건지 확인할 수 있게 아래와 같이 &lt;b&gt;application-[개발환경].properties&lt;/b&gt;에 명시에 주었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1707717841930&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;profile.now=dev_profile&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;아래는 &lt;b&gt;application-[개발환경].properties&lt;/b&gt; 에 명시에 둔 키값을 맵핑할 enum이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1707717893949&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public enum ProfileKey {
    NAME;
    public String str() {
        return &quot;profile.now&quot;;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;다음으로 현재 프로파일 정보를 편하게 사용하기 위한 enum을 하나 생성해 준다. &lt;span style=&quot;color: #009a87;&quot;&gt;(해당 부분은 옵션으로 하드코딩으로 구현해도 된다.)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1707717725876&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public enum ProfileCode {
    LOCAL_PROFILE,
    DEV_PROFILE,
    MAIN_PROFILE;


    public String lowerStr() {
        return this.name().toLowerCase();
    }

    public String upperStr() {
        return this.name().toLowerCase();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이후 ProfileConfig를 생성하여 현재의 프로파일 정보를 확인 할 수 있게끔 Config 를 만들어준다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1707717965268&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import jakarta.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;

@Slf4j
@Configuration
public class ProfileConfig {

    public final Environment env; //설정값을 가져오기 위한 객체


    public ProfileConfig(Environment env) {
        this.env = env;
    }

    @PostConstruct
    public void init(){
        //로그 찍기
        log.info(&quot; ===== [INIT] nowProfile = {}&quot;, env.getProperty(ProfileKey.NAME.str()));
    }

    //현재 프로파일 정보를 가져온다.
    public ProfileCode now(){

        String nowProfile = env.getProperty(ProfileKey.NAME.str());
        if(nowProfile == null) return ProfileCode.DEV_PROFILE;
        else if(nowProfile.equals(ProfileCode.LOCAL_PROFILE.lowerStr())) return  ProfileCode.LOCAL_PROFILE;
        else if(nowProfile.equals(ProfileCode.DEV_PROFILE.lowerStr())) return  ProfileCode.DEV_PROFILE;
        else if(nowProfile.equals(ProfileCode.MAIN_PROFILE.lowerStr())) return  ProfileCode.MAIN_PROFILE;
        else return  ProfileCode.DEV_PROFILE;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;해당 config의 init을 통해 프로젝트 실행 시 아래와 같이 현재 profile 정보를 확인할 수 있고 now() 함수를 통해 어떤 클래스에서 든지 현재의 프로파일 정보를 확인 할 수 있게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;907&quot; data-origin-height=&quot;79&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAptDg/btsEFSvDA2s/mx9rK7e7ApyfDLAmXOnjk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAptDg/btsEFSvDA2s/mx9rK7e7ApyfDLAmXOnjk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAptDg/btsEFSvDA2s/mx9rK7e7ApyfDLAmXOnjk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAptDg%2FbtsEFSvDA2s%2Fmx9rK7e7ApyfDLAmXOnjk1%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;907&quot; height=&quot;79&quot; data-origin-width=&quot;907&quot; data-origin-height=&quot;79&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;3. 설정방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;인텔리제이에서는 &lt;b&gt;run/debug configurations&lt;/b&gt;에서 profile을 설정할 수 있고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;672&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GkjmL/btsEHpzAK3k/W5Kd47sZksDrBZ5GboSkP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GkjmL/btsEHpzAK3k/W5Kd47sZksDrBZ5GboSkP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GkjmL/btsEHpzAK3k/W5Kd47sZksDrBZ5GboSkP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGkjmL%2FbtsEHpzAK3k%2FW5Kd47sZksDrBZ5GboSkP1%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;804&quot; height=&quot;672&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;672&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;배포 시에는 생성되는 -jar 파일에 아래와 같은 옵션을 주어 생성하면 명시된 프로파일 정보에 따라 프로젝트가 빌드된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #afb9c3;&quot;&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;-Dspring.profiles.active=dev&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EC%86%8C%ED%8C%8C%EC%99%80-%EC%B0%BD%EB%AC%B8%EC%9D%B4-%EC%9E%88%EB%8A%94-%EA%B1%B0%EC%8B%A4-6pVMAjyGCPw?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@thimovanleeuwen?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Thimo van Leeuwen&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>WEB/Spring</category>
      <category>jar profile</category>
      <category>run/debug configurations</category>
      <category>spring boot enviroment</category>
      <category>spring boot profile</category>
      <category>spring boot 개발 환경 분리</category>
      <category>인텔리제이 profiles</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/602</guid>
      <comments>https://seeminglyjs.tistory.com/602#entry602comment</comments>
      <pubDate>Tue, 27 Feb 2024 09:16:44 +0900</pubDate>
    </item>
    <item>
      <title>Spring boot log4j2 셋팅 방법 정리</title>
      <link>https://seeminglyjs.tistory.com/601</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-02-23&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;neom-dMSYsXdwl9M-unsplash.jpg&quot; data-origin-width=&quot;5272&quot; data-origin-height=&quot;3948&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xX7WN/btsED5CuSsJ/hntXxTDzgbRmosLWBuIYkK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xX7WN/btsED5CuSsJ/hntXxTDzgbRmosLWBuIYkK/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 NEOM&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xX7WN/btsED5CuSsJ/hntXxTDzgbRmosLWBuIYkK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxX7WN%2FbtsED5CuSsJ%2FhntXxTDzgbRmosLWBuIYkK%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;489&quot; height=&quot;366&quot; data-filename=&quot;neom-dMSYsXdwl9M-unsplash.jpg&quot; data-origin-width=&quot;5272&quot; data-origin-height=&quot;3948&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 NEOM&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;build.gradle&lt;/span&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1707460463796&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...
configurations {
	configureEach { //기본 스프링의 로그백과의 충돌 방지를 위해 제외시킨다.
		exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
	}
...
}

...
        
dependencies {
...
	implementation &quot;org.springframework.boot:spring-boot-starter-log4j2&quot;;
...
}
...&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;application.properties&lt;/span&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1707460505725&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...
#logging setting
logging.config=classpath:log4j2/log4j2-local.xml
...&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;log4j2-local.xml&lt;/span&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1707460577861&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;Configuration&amp;gt;

    &amp;lt;!-- 해당 설정파일에서 사용하는 프로퍼티 해당 위치에 디렉토리 없으면 자동으로 만든다.--&amp;gt;
    &amp;lt;Properties&amp;gt;
        &amp;lt;property name=&quot;LOGS_PATH&quot;&amp;gt;/test/logs&amp;lt;/property&amp;gt;
    &amp;lt;/Properties&amp;gt;

    &amp;lt;Appenders&amp;gt;
        &amp;lt;!-- 콘솔 로깅 --&amp;gt;
        &amp;lt;Console name=&quot;console&quot; target=&quot;SYSTEM_OUT&quot;&amp;gt;
                        &amp;lt;PatternLayout pattern=&quot;%style{[%d{yyyy-MM-dd HH:mm:ss}:%-3relative] }{white}%highlight{%level}{FATAL=red, ERROR=red, WARN=yellow, INFO=green, DEBUG=cyan, TRACE=cyan} [%style{%t}{cyan}] %style{%logger{35}}{magenta}%n %style{[%l]}{blue}%n:LOG: %msg%n%throwable%n&quot; /&amp;gt;
        &amp;lt;/Console&amp;gt;

        &amp;lt;!-- 파일 압축 기준--&amp;gt;
        &amp;lt;RollingFile name =&quot;RollingFile&quot;&amp;gt;
            &amp;lt;FileName&amp;gt;${LOGS_PATH}/log4j2.log&amp;lt;/FileName&amp;gt;
            &amp;lt;FilePattern&amp;gt;${LOGS_PATH}/%d{yyyy-MM-dd}/log4j2.%d{yyyy-MM-dd}.%i.log.gz&amp;lt;/FilePattern&amp;gt;
            &amp;lt;PatternLayout&amp;gt;
                &amp;lt;Pattern&amp;gt;%d{yyyy-MM-dd HH:mm:ss} %5p [%t] [%c] :LOG: %m%n%throwable&amp;lt;/Pattern&amp;gt;
            &amp;lt;/PatternLayout&amp;gt;
            &amp;lt;Policies&amp;gt;
                &amp;lt;SizeBasedTriggeringPolicy size=&quot;10KB&quot;/&amp;gt; &amp;lt;!--10MB 이상 시 압축--&amp;gt;
                &amp;lt;TimeBasedTriggeringPolicy interval = &quot;1&quot; modulate = &quot;true&quot;/&amp;gt; &amp;lt;!--파일 패턴의 마지막 시간 패턴으로 인터벌이 계산됨 yyyy-MM-dd 이기 때문에 하루 기준 계산--&amp;gt;
            &amp;lt;/Policies&amp;gt;
            &amp;lt;DefaultRolloverStrategy max=&quot;10000&quot; fileIndex=&quot;min&quot;/&amp;gt; &amp;lt;!--압축된 파일 최대 만개 그 이후는 오버라이딩 됨 첫번쨰 부터--&amp;gt;
        &amp;lt;/RollingFile&amp;gt;
    &amp;lt;/Appenders&amp;gt;

    &amp;lt;Loggers&amp;gt;
        &amp;lt;!-- Application Loggers --&amp;gt;
        &amp;lt;!-- Root 설정보다 우선순위가 높으며 패키지별 개별 로그 지정 가능 --&amp;gt;
        &amp;lt;logger name=&quot;com.example.exp.controller&quot; level=&quot;INFO&quot; additivity=&quot;false&quot;&amp;gt;
            &amp;lt;AppenderRef ref=&quot;console&quot; /&amp;gt;
            &amp;lt;AppenderRef ref=&quot;RollingFile&quot; /&amp;gt;
        &amp;lt;/logger&amp;gt;

        &amp;lt;logger name=&quot;com.example.exp.service&quot; level=&quot;INFO&quot; additivity=&quot;false&quot;&amp;gt;
            &amp;lt;AppenderRef ref=&quot;console&quot; /&amp;gt;
            &amp;lt;AppenderRef ref=&quot;RollingFile&quot; /&amp;gt;
        &amp;lt;/logger&amp;gt;

        &amp;lt;!-- FATAL, ERROR, WARN, INFO, DEBUG, TRACE --&amp;gt;
        &amp;lt;Root level=&quot;INFO&quot;&amp;gt;
            &amp;lt;AppenderRef ref=&quot;console&quot; /&amp;gt;
            &amp;lt;AppenderRef ref=&quot;RollingFile&quot; /&amp;gt;
        &amp;lt;/Root&amp;gt;
    &amp;lt;/Loggers&amp;gt;
&amp;lt;/Configuration&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 :&amp;nbsp;사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EB%B0%94%EC%9C%84%EC%99%80-%EB%AA%A8%EB%9E%98%EA%B0%80-%EC%9E%88%EB%8A%94-%EC%82%AC%EB%A7%89%EC%9D%98-%EC%A1%B0%EA%B0%90%EB%8F%84-dMSYsXdwl9M?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@neom?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;NEOM&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;</description>
      <category>WEB/Spring</category>
      <category>AppenderRef</category>
      <category>DefaultRolloverStrategy</category>
      <category>log4j2 설정방법</category>
      <category>log4j2 성능</category>
      <category>PatternLayout</category>
      <category>RollingFile</category>
      <category>Spring boot log4j2</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/601</guid>
      <comments>https://seeminglyjs.tistory.com/601#entry601comment</comments>
      <pubDate>Fri, 23 Feb 2024 09:37:15 +0900</pubDate>
    </item>
    <item>
      <title>jar 파일 배포시 Thymeleaf 리소스 못찾는 문제 해결 방법</title>
      <link>https://seeminglyjs.tistory.com/600</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-02-21&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;claudio-schwarz-vmAvjw6SaV4-unsplash.jpg&quot; data-origin-width=&quot;6000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHLWa9/btsEm8LNYBd/uPpZXpL13Y361DxYjuekkk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHLWa9/btsEm8LNYBd/uPpZXpL13Y361DxYjuekkk/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Claudio Schwarz&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHLWa9/btsEm8LNYBd/uPpZXpL13Y361DxYjuekkk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHLWa9%2FbtsEm8LNYBd%2FuPpZXpL13Y361DxYjuekkk%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;431&quot; height=&quot;287&quot; data-filename=&quot;claudio-schwarz-vmAvjw6SaV4-unsplash.jpg&quot; data-origin-width=&quot;6000&quot; data-origin-height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Claudio Schwarz&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;application.properties&lt;/b&gt; 에 설정해 둔 경로 확인&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1706941186102&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Thymeleaf
spring.thymeleaf.enabled=true
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML
spring.thymeleaf.encoding=UTF-8
#spring.thymeleaf.cache=false&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;return&lt;/b&gt; 경로가 &lt;b&gt;&quot;/home/home&quot;&lt;/b&gt; 이런식으로 되어 있으면 경로 못 찾음 &lt;b&gt;spring.thymeleaf.prefix=classpath:/templates/&lt;/b&gt; 에서 이미 &lt;b&gt;/&lt;/b&gt; 를 붙여 주었으니 아래와 같이 되어 있는지 확인&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1706941261184&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;   @GetMapping(&quot;/home&quot;)
    public String getHomeView(Model model){
		. . .
        return &quot;home/home&quot;;
    }&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 :사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EC%A0%84%EA%B2%BD%EC%97%90-%EB%82%98%EB%AC%B4%EA%B0%80-%EC%9E%88%EB%8A%94-%EC%82%B0%EB%A7%A5%EC%9D%98-%EB%AA%A8%EC%8A%B5-vmAvjw6SaV4?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@purzlbaum?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Claudio Schwarz&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>WEB/Thymeleaf</category>
      <category>jar 파일 배포시 Thymeleaf 리소스 못찾는 문제 해결 방법</category>
      <category>spring.thymeleaf.enabled=true</category>
      <category>spring.thymeleaf.prefix=classpath:/templates/</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/600</guid>
      <comments>https://seeminglyjs.tistory.com/600#entry600comment</comments>
      <pubDate>Wed, 21 Feb 2024 09:23:22 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot 파일 업로드(multipart) 용량제한 설정하기 Resolved [org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded]</title>
      <link>https://seeminglyjs.tistory.com/599</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-02-19&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;daniel-j-schwarz-wSFfGQnFNdw-unsplash.jpg&quot; data-origin-width=&quot;4160&quot; data-origin-height=&quot;6240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btpMux/btsEmXcFV2D/YNtzN5XsoN0JQISZqKcOnk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btpMux/btsEmXcFV2D/YNtzN5XsoN0JQISZqKcOnk/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Daniel J. Schwarz&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btpMux/btsEmXcFV2D/YNtzN5XsoN0JQISZqKcOnk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtpMux%2FbtsEmXcFV2D%2FYNtzN5XsoN0JQISZqKcOnk%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;354&quot; height=&quot;531&quot; data-filename=&quot;daniel-j-schwarz-wSFfGQnFNdw-unsplash.jpg&quot; data-origin-width=&quot;4160&quot; data-origin-height=&quot;6240&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Daniel J. Schwarz&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;자신의 프로파일에 맞는 application.properties 파일에 아래와 같이 설정값을 변경해주면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1706940958381&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;spring.servlet.multipart.maxFileSize=10MB
spring.servlet.multipart.maxRequestSize=10MB&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EC%A0%88%EB%B2%BD%EA%B3%BC-%EC%88%98%EC%97%AD%EC%9D%B4-%EC%9E%88%EB%8A%94-%ED%95%B4%EB%B3%80-wSFfGQnFNdw?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@danieljschwarz?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Daniel J. Schwarz&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>WEB/Spring</category>
      <category>Resolved [org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded]</category>
      <category>Spring Boot 파일 업로드(multipart) 용량제한 설정하기</category>
      <category>springboot multipart</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/599</guid>
      <comments>https://seeminglyjs.tistory.com/599#entry599comment</comments>
      <pubDate>Mon, 19 Feb 2024 09:17:46 +0900</pubDate>
    </item>
    <item>
      <title>-jar resources folder 접근 java.nio.file.NoSuchFileException 해결</title>
      <link>https://seeminglyjs.tistory.com/598</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-02-16&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;neom-s6g6ZSxM3kQ-unsplash.jpg&quot; data-origin-width=&quot;8189&quot; data-origin-height=&quot;5462&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbO0zX/btsEa6BljFm/5B0uPYEhZiYOi4km0aZ7vK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbO0zX/btsEa6BljFm/5B0uPYEhZiYOi4km0aZ7vK/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 NEOM&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbO0zX/btsEa6BljFm/5B0uPYEhZiYOi4km0aZ7vK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbO0zX%2FbtsEa6BljFm%2F5B0uPYEhZiYOi4km0aZ7vK%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;503&quot; height=&quot;335&quot; data-filename=&quot;neom-s6g6ZSxM3kQ-unsplash.jpg&quot; data-origin-width=&quot;8189&quot; data-origin-height=&quot;5462&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 NEOM&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1.&amp;nbsp; 문제 발생&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;IDE에서는 &lt;b&gt;src/main/.../test.properties&lt;/b&gt; 이런 식으로 사용해도 문제없이 동작을 했지만 -jar 파일로 생성 후 해당 부분을 그대로 쓰면 &lt;b&gt;java.nio.file.NoSuchFileException&lt;/b&gt; 가 발생하게 된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. 원인&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;배포시에 src/main/resources의 루트 경로가 &lt;b&gt;target/classes&lt;/b&gt; 또는 &lt;b&gt;build/classes&lt;/b&gt;로 변경되게 된다. 이를 위해 리소스 파일을 읽어 올 때는 동적으로 root를 잡을 수 있게 코드를 수정해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;3. 해결 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;getClass.getClassLoader().getResourceAsStream('자신의 정적파일 위치')&lt;/b&gt;를 통해 자신이 위치시킬 파일의 정보를 읽어올 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1706658498679&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    private InputStream getFileFromResourceAsStream(String fileName) {

        //현재 클래스에서 루트 경로를 얻어 해당 파일을 정보를 읽어온다.
        //만약에 파일 경로가 resources/config/test.properties 와 비슷한 형시이면
        //fileName = config/test.properties; 와 같은 형식이 될 것이다.
        ClassLoader classLoader = getClass().getClassLoader();
        InputStream inputStream = classLoader.getResourceAsStream(fileName);

        // the stream holding the file content
        if (inputStream == null) {
            throw new IllegalArgumentException(&quot;file not found! &quot; + fileName);
        } else {
            return inputStream;
        }

    }&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;4. 출처&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://mkyong.com/java/java-read-a-file-from-resources-folder/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://mkyong.com/java/java-read-a-file-from-resources-folder/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EC%82%B0%EC%9D%84-%EB%B0%B0%EA%B2%BD%EC%9C%BC%EB%A1%9C-%EB%B0%94%EB%8B%A4%EC%97%90%EC%84%9C-%EC%88%98%EC%98%81%ED%95%98%EB%8A%94-%EC%82%AC%EB%9E%8C-s6g6ZSxM3kQ?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@neom?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;NEOM&lt;/a&gt; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Language/Java</category>
      <category>Classloader</category>
      <category>getClass.getClassLoader().</category>
      <category>getResourceAsStream</category>
      <category>jar</category>
      <category>Jar resources 접근 방법</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/598</guid>
      <comments>https://seeminglyjs.tistory.com/598#entry598comment</comments>
      <pubDate>Fri, 16 Feb 2024 09:53:54 +0900</pubDate>
    </item>
    <item>
      <title>Flutter google Login 시 IOS 강제 종료 현상 해결 방법 firebase</title>
      <link>https://seeminglyjs.tistory.com/597</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-02-14&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;sung-jin-cho-Z7q92s_KcpU-unsplash.jpg&quot; data-origin-width=&quot;9520&quot; data-origin-height=&quot;6336&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u6g9g/btsDRaYRexM/S7RiYFlIgycFqA92SVcKP1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u6g9g/btsDRaYRexM/S7RiYFlIgycFqA92SVcKP1/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Sung Jin Cho&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u6g9g/btsDRaYRexM/S7RiYFlIgycFqA92SVcKP1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu6g9g%2FbtsDRaYRexM%2FS7RiYFlIgycFqA92SVcKP1%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;657&quot; height=&quot;437&quot; data-filename=&quot;sung-jin-cho-Z7q92s_KcpU-unsplash.jpg&quot; data-origin-width=&quot;9520&quot; data-origin-height=&quot;6336&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Sung Jin Cho&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #24292f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;../your_app/ios/Runner/GoogleService-Info.plist&lt;/b&gt; 에서 &lt;b&gt;REVERSED_CLIENT_ID&lt;/b&gt;&amp;nbsp;를 &lt;b&gt;Info.plist&lt;/b&gt; 에 추가하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #24292f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1706098391672&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;key&amp;gt;REVERSED_CLIENT_ID&amp;lt;/key&amp;gt;
&amp;lt;string&amp;gt;{value}/string&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; &lt;b&gt;../your_app/ios/Runner/Info.plist&lt;/b&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1706098425705&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;key&amp;gt;CFBundleURLTypes&amp;lt;/key&amp;gt;
	&amp;lt;array&amp;gt;
	    &amp;lt;dict&amp;gt;
	        &amp;lt;key&amp;gt;CFBundleTypeRole&amp;lt;/key&amp;gt;
	        &amp;lt;string&amp;gt;Editor&amp;lt;/string&amp;gt;
	        &amp;lt;key&amp;gt;CFBundleURLSchemes&amp;lt;/key&amp;gt;
	        &amp;lt;array&amp;gt;
	        	&amp;lt;string&amp;gt;{value}&amp;lt;/string&amp;gt;
	        &amp;lt;/array&amp;gt;
	    &amp;lt;/dict&amp;gt;
	&amp;lt;/array&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EB%B6%84%ED%99%8D%EC%83%89-%ED%95%98%EB%8A%98%EC%9D%84-%EB%B0%B0%EA%B2%BD%EC%9C%BC%EB%A1%9C-%ED%95%9C-%EC%95%BC%EC%9E%90%EC%88%98-Z7q92s_KcpU?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@mbuff?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Sung Jin Cho&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;</description>
      <category>App/Flutter</category>
      <category>flutter firebase ios 강제 종료</category>
      <category>Flutter google Login 시 IOS 강제 종료 현상 해결 방법</category>
      <category>flutter ios google login</category>
      <category>flutter ios 강제종료 해결</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/597</guid>
      <comments>https://seeminglyjs.tistory.com/597#entry597comment</comments>
      <pubDate>Wed, 14 Feb 2024 09:15:36 +0900</pubDate>
    </item>
    <item>
      <title>Building with plugins requires symlink support.Please enable Developer Mode in your system settings. Run  start ms-settings:developersto open settings. 해결 방법</title>
      <link>https://seeminglyjs.tistory.com/596</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-02-12&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;ryan-geller-TRquyIT7OLQ-unsplash.jpg&quot; data-origin-width=&quot;2887&quot; data-origin-height=&quot;3736&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqBmJB/btsDKNWh3XZ/ukWeWYAVISWCbiRmhcjx51/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqBmJB/btsDKNWh3XZ/ukWeWYAVISWCbiRmhcjx51/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Ryan Geller&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqBmJB/btsDKNWh3XZ/ukWeWYAVISWCbiRmhcjx51/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqBmJB%2FbtsDKNWh3XZ%2FukWeWYAVISWCbiRmhcjx51%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;426&quot; height=&quot;551&quot; data-filename=&quot;ryan-geller-TRquyIT7OLQ-unsplash.jpg&quot; data-origin-width=&quot;2887&quot; data-origin-height=&quot;3736&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Ryan Geller&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 문제 발생&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1705925247142&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;flutter pub get&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;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt; flutter 라이브러리들을 가져오는 도중 아래와 같은 에러가 발생했다. 이는 ms-setting을 윈도 내에서 시작하지 않아 발생하는 문제이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;463&quot; data-origin-height=&quot;89&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNq4My/btsDJlsJSlC/GjEsYhwvgGrbJFsApdwkZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNq4My/btsDJlsJSlC/GjEsYhwvgGrbJFsApdwkZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNq4My/btsDJlsJSlC/GjEsYhwvgGrbJFsApdwkZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNq4My%2FbtsDJlsJSlC%2FGjEsYhwvgGrbJFsApdwkZ0%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;463&quot; height=&quot;89&quot; data-origin-width=&quot;463&quot; data-origin-height=&quot;89&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. 해결방법&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1705925268072&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;start ms-settings:developers&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;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;위의 명령어 실행 후 다시 flutter pub get으로 라이브러리들을 불러오면 오류 없이 실행되는 것을 확인 할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;539&quot; data-origin-height=&quot;57&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EIeFV/btsDQWY0SzB/9FQax9zyyb9RpuDE2BdLV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EIeFV/btsDQWY0SzB/9FQax9zyyb9RpuDE2BdLV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EIeFV/btsDQWY0SzB/9FQax9zyyb9RpuDE2BdLV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEIeFV%2FbtsDQWY0SzB%2F9FQax9zyyb9RpuDE2BdLV1%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;539&quot; height=&quot;57&quot; data-origin-width=&quot;539&quot; data-origin-height=&quot;57&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EB%AC%BC%EA%B3%BC-%EB%AA%A8%EB%9E%98%EC%9D%98-%EC%A1%B0%EA%B0%90%EB%8F%84-TRquyIT7OLQ?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@ryangeller?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Ryan Geller&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;</description>
      <category>App/Flutter</category>
      <category>Building with plugins requires symlink support.Please enable Developer Mode in your system settings. Run start ms-settings:developersto open settings.</category>
      <category>flutter pub get</category>
      <category>flutter pub get error</category>
      <category>flutter pub get warning</category>
      <category>start ms-settings:developers</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/596</guid>
      <comments>https://seeminglyjs.tistory.com/596#entry596comment</comments>
      <pubDate>Mon, 12 Feb 2024 09:11:10 +0900</pubDate>
    </item>
    <item>
      <title>Github Action 에서 현재 시간 가져오기 $(date) &amp;quot;$GITHUB_OUTPUT&amp;quot;</title>
      <link>https://seeminglyjs.tistory.com/595</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-02-09&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;scott-lord-nGY9el_GnU0-unsplash.jpg&quot; data-origin-width=&quot;2580&quot; data-origin-height=&quot;2648&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OomIw/btsDJh3OKHS/quGy24evnChHFHpDdvYDXk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OomIw/btsDJh3OKHS/quGy24evnChHFHpDdvYDXk/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Scott Lord&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OomIw/btsDJh3OKHS/quGy24evnChHFHpDdvYDXk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOomIw%2FbtsDJh3OKHS%2FquGy24evnChHFHpDdvYDXk%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;406&quot; height=&quot;417&quot; data-filename=&quot;scott-lord-nGY9el_GnU0-unsplash.jpg&quot; data-origin-width=&quot;2580&quot; data-origin-height=&quot;2648&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Scott Lord&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1705628277579&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;      - name: Get current date
        id: date
        run: echo &quot;date=$(date +'%Y-%m-%d-%H-%M-%S')&quot; &amp;gt;&amp;gt; &quot;$GITHUB_OUTPUT&quot;
      - run: echo ${{ steps.date.outputs.date }}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. 예시&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;도커 이미지에 날짜 태그로 붙여서 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1705709783442&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker push ${{ secrets.DOCKER_USERNAME }}/${{ secrets.MAIN_DOCKER_REPONAME }}:${{ steps.date.outputs.date }}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;3. 출처&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/60942067/get-current-date-and-time-in-github-workflows&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://stackoverflow.com/questions/60942067/get-current-date-and-time-in-github-workflows&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1705628222457&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;Get current date and time in GitHub workflows&quot; data-og-description=&quot;I have a GitHub workflow for releasing nightly snapshots of the repository. It uses the create-release action. This is how the workflow file looks right now: name: Release Nightly Snapshot on:&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/60942067/get-current-date-and-time-in-github-workflows&quot; data-og-url=&quot;https://stackoverflow.com/questions/60942067/get-current-date-and-time-in-github-workflows&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b2CwXZ/hyU5SM4rVD/x1Hk25mrg9bDuOkOhjT2F0/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/60942067/get-current-date-and-time-in-github-workflows&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/60942067/get-current-date-and-time-in-github-workflows&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b2CwXZ/hyU5SM4rVD/x1Hk25mrg9bDuOkOhjT2F0/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&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;Get current date and time in GitHub workflows&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I have a GitHub workflow for releasing nightly snapshots of the repository. It uses the create-release action. This is how the workflow file looks right now: name: Release Nightly Snapshot on:&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://hynek.me/til/set-output-deprecation-github-actions/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://hynek.me/til/set-output-deprecation-github-actions/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1705628250428&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;How to Fix the set-output GitHub Actions Deprecation Warning&quot; data-og-description=&quot;If you have a GitHub Actions workflow that sets an output using echo ::set-output key=value, you have started to see an unhelpful deprecation warning. Here&amp;rsquo;s how to fix it.&quot; data-og-host=&quot;hynek.me&quot; data-og-source-url=&quot;https://hynek.me/til/set-output-deprecation-github-actions/&quot; data-og-url=&quot;https://hynek.me/til/set-output-deprecation-github-actions/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/H0CtU/hyU5SzwIcG/KKK5vaxEdRRdNcktOsyYE1/img.png?width=909&amp;amp;height=476&amp;amp;face=0_0_909_476,https://scrap.kakaocdn.net/dn/FWAT9/hyU5QaBRuX/QbBJksQ9xKbLYw0HBd55E1/img.png?width=909&amp;amp;height=476&amp;amp;face=0_0_909_476,https://scrap.kakaocdn.net/dn/btQdz2/hyU8XspbhM/5NJfnM7v365FPH7cMiQyMk/img.jpg?width=200&amp;amp;height=200&amp;amp;face=94_70_158_140&quot;&gt;&lt;a href=&quot;https://hynek.me/til/set-output-deprecation-github-actions/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hynek.me/til/set-output-deprecation-github-actions/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/H0CtU/hyU5SzwIcG/KKK5vaxEdRRdNcktOsyYE1/img.png?width=909&amp;amp;height=476&amp;amp;face=0_0_909_476,https://scrap.kakaocdn.net/dn/FWAT9/hyU5QaBRuX/QbBJksQ9xKbLYw0HBd55E1/img.png?width=909&amp;amp;height=476&amp;amp;face=0_0_909_476,https://scrap.kakaocdn.net/dn/btQdz2/hyU8XspbhM/5NJfnM7v365FPH7cMiQyMk/img.jpg?width=200&amp;amp;height=200&amp;amp;face=94_70_158_140');&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;How to Fix the set-output GitHub Actions Deprecation Warning&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;If you have a GitHub Actions workflow that sets an output using echo ::set-output key=value, you have started to see an unhelpful deprecation warning. Here&amp;rsquo;s how to fix it.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hynek.me&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%ED%95%98%EB%8A%98%EC%97%90-%EC%9E%88%EB%8A%94-%EB%A7%A4%EC%9A%B0-%ED%81%B0-%EC%84%B1%EB%8B%A8-nGY9el_GnU0?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@darkcatimages?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Scott Lord&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;</description>
      <category>Git/GitHub</category>
      <category>&amp;quot;$GITHUB_OUTPUT&amp;quot;</category>
      <category>github action $(date)</category>
      <category>github action 에서 현재 날짜 가져오기</category>
      <category>깃허브 액션 date</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/595</guid>
      <comments>https://seeminglyjs.tistory.com/595#entry595comment</comments>
      <pubDate>Fri, 9 Feb 2024 09:38:00 +0900</pubDate>
    </item>
    <item>
      <title>도커(Docker) 컨테이너 무기한/무한 실행하는 방법</title>
      <link>https://seeminglyjs.tistory.com/593</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-02-07&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;jigar-panchal-0nMAg7FBGuw-unsplash.jpg&quot; data-origin-width=&quot;7680&quot; data-origin-height=&quot;4320&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yckYx/btsDKaiX8fk/eX81A50BaK0fZsnlG5pr21/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yckYx/btsDKaiX8fk/eX81A50BaK0fZsnlG5pr21/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 Jigar Panchal&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yckYx/btsDKaiX8fk/eX81A50BaK0fZsnlG5pr21/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyckYx%2FbtsDKaiX8fk%2FeX81A50BaK0fZsnlG5pr21%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;565&quot; height=&quot;318&quot; data-filename=&quot;jigar-panchal-0nMAg7FBGuw-unsplash.jpg&quot; data-origin-width=&quot;7680&quot; data-origin-height=&quot;4320&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 Jigar Panchal&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. pseudo-TTY &lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;우선 pseudo-TTY를 알아야 하는데 이는 유저 또는 애플리케이션이 shell에 대한 권한을 얻기 위해 사용된다. pseudo-TTY는 master와 slave 두 개의 파일이 쌍을 이루어 구성되는데, &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;master&amp;nbsp;&lt;/span&gt; 파일은&amp;nbsp; &lt;span style=&quot;background-color: #ffffff; color: #161616; text-align: start;&quot;&gt;OMVS 나 rlogin 같은 네트워크 애플리케이션에 사용되며, &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;slave 은 터미널이나 쉘이 데이터를 읽기 위해 사용된다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;자세한 내용은 아래 참고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://www.ibm.com/docs/en/zos/2.2.0?topic=files-pseudoterminal&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.ibm.com/docs/en/zos/2.2.0?topic=files-pseudoterminal&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1705794286549&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;Pseudoterminal files&quot; data-og-description=&quot;Pseudoterminals (pseudo-TTYs) are used by users and applications to gain access to the shell. A pseudo-TTY is a pair of character special files, a master file and a corresponding slave file. The master file is used by a networking application such as OMVS &quot; data-og-host=&quot;www.ibm.com&quot; data-og-source-url=&quot;https://www.ibm.com/docs/en/zos/2.2.0?topic=files-pseudoterminal&quot; data-og-url=&quot;https://www.ibm.com/docs/en/zos/2.2.0?topic=files-pseudoterminal&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.ibm.com/docs/en/zos/2.2.0?topic=files-pseudoterminal&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.ibm.com/docs/en/zos/2.2.0?topic=files-pseudoterminal&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Pseudoterminal files&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Pseudoterminals (pseudo-TTYs) are used by users and applications to gain access to the shell. A pseudo-TTY is a pair of character special files, a master file and a corresponding slave file. The master file is used by a networking application such as OMVS&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.ibm.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. Docker pseudo-TTY &lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;도커에서도 컨테이너에 pseudo-TTY 옵션&lt;span style=&quot;color: #009a87;&quot;&gt;( -t )&lt;/span&gt;을 주어 실행시킬 수 있는데, 이를 통해 컨테이너는 세션이 끝날때 까지 종료되지 않게 할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;해당 옵션에 추가적으로 -d 옵션을 주어 실행 시키면 해당 컨테이너를 무기한 실행시킬 수 있게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1705794656329&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -d -t ubuntu&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;background-color: #141b1f; color: #ffffff; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;--detach&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;-d&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Run container in background and print container ID&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;background-color: #141b1f; color: #ffffff; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;background-color: #000000;&quot;&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;--tty&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;-t&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Allocate a pseudo-TTY&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;3. 출처&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;a href=&quot;https://www.baeldung.com/ops/running-docker-containers-indefinitely&quot;&gt;https://www.baeldung.com/ops/running-docker-containers-indefinitely&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EC%82%AC%EA%B0%81%ED%98%95%EA%B3%BC-%EC%A7%81%EC%82%AC%EA%B0%81%ED%98%95%EC%9D%B4-%EC%9E%88%EB%8A%94-%EC%B6%94%EC%83%81%EC%A0%81%EC%9D%B8-%EB%B3%B4%EB%9D%BC%EC%83%89-%EB%B0%B0%EA%B2%BD-0nMAg7FBGuw?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@brave4_heart?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Jigar Panchal&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;</description>
      <category>Tool/DocKer</category>
      <category>docker run -d -t containerId</category>
      <category>docker run infinity</category>
      <category>docker run 무기한</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/593</guid>
      <comments>https://seeminglyjs.tistory.com/593#entry593comment</comments>
      <pubDate>Wed, 7 Feb 2024 09:52:52 +0900</pubDate>
    </item>
    <item>
      <title>깃허브 ! refs/heads/main:refs/heads/main [remote rejected] (refusing to allow a Personal Access Token to create or update workflow `.github/workflows/github-action.yml` without `workflow` scope) 해결 방법</title>
      <link>https://seeminglyjs.tistory.com/590</link>
      <description>&lt;p 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;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2024-01-02&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;neom--RlktmDy3Ec-unsplash.jpg&quot; data-origin-width=&quot;7692&quot; data-origin-height=&quot;5760&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/calYTb/btsDGpV6bxn/6VmLEVll8oNJk8oVykNHlk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/calYTb/btsDGpV6bxn/6VmLEVll8oNJk8oVykNHlk/img.jpg&quot; data-alt=&quot;사진: Unsplash 의 NEOM&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/calYTb/btsDGpV6bxn/6VmLEVll8oNJk8oVykNHlk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcalYTb%2FbtsDGpV6bxn%2F6VmLEVll8oNJk8oVykNHlk%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;439&quot; height=&quot;329&quot; data-filename=&quot;neom--RlktmDy3Ec-unsplash.jpg&quot; data-origin-width=&quot;7692&quot; data-origin-height=&quot;5760&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사진: Unsplash 의 NEOM&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 방법&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;깃허브 자신의 프로파일 클릭&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;632&quot; data-origin-height=&quot;98&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkCQZ9/btsDETb47xL/HkRScy8Wt4UVm5VPKZFFt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkCQZ9/btsDETb47xL/HkRScy8Wt4UVm5VPKZFFt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkCQZ9/btsDETb47xL/HkRScy8Wt4UVm5VPKZFFt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkCQZ9%2FbtsDETb47xL%2FHkRScy8Wt4UVm5VPKZFFt0%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;632&quot; height=&quot;98&quot; data-origin-width=&quot;632&quot; data-origin-height=&quot;98&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;settings 클릭&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;313&quot; data-origin-height=&quot;718&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KCTYY/btsDJld4Ypv/X75UrxKE6WPECz4B6zNMlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KCTYY/btsDJld4Ypv/X75UrxKE6WPECz4B6zNMlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KCTYY/btsDJld4Ypv/X75UrxKE6WPECz4B6zNMlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKCTYY%2FbtsDJld4Ypv%2FX75UrxKE6WPECz4B6zNMlK%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;313&quot; height=&quot;718&quot; data-origin-width=&quot;313&quot; data-origin-height=&quot;718&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Developer settings 클릭&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;311&quot; data-origin-height=&quot;1073&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwuo88/btsDJaRokiS/iTiDrCbsZHaBxys2IViY6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwuo88/btsDJaRokiS/iTiDrCbsZHaBxys2IViY6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwuo88/btsDJaRokiS/iTiDrCbsZHaBxys2IViY6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcwuo88%2FbtsDJaRokiS%2FiTiDrCbsZHaBxys2IViY6K%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;311&quot; height=&quot;1073&quot; data-origin-width=&quot;311&quot; data-origin-height=&quot;1073&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Personal access tokens -&amp;gt; Tokens -&amp;gt; 자신이 사용 중인 토큰 클릭&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5Puts/btsDJDZO97e/ImCiF4DL7d54ECyUZ10pKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5Puts/btsDJDZO97e/ImCiF4DL7d54ECyUZ10pKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5Puts/btsDJDZO97e/ImCiF4DL7d54ECyUZ10pKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5Puts%2FbtsDJDZO97e%2FImCiF4DL7d54ECyUZ10pKK%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;1192&quot; height=&quot;490&quot; data-origin-width=&quot;1192&quot; data-origin-height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;workflow 체크박스 선택 후 Update token 으로 저장&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;425&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biUfdd/btsDHovC5AJ/W3urlR2YDK790EglWDYgG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biUfdd/btsDHovC5AJ/W3urlR2YDK790EglWDYgG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biUfdd/btsDHovC5AJ/W3urlR2YDK790EglWDYgG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiUfdd%2FbtsDHovC5AJ%2FW3urlR2YDK790EglWDYgG0%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;781&quot; height=&quot;425&quot; data-origin-width=&quot;781&quot; data-origin-height=&quot;425&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;81&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bx8fag/btsDGkHgJHz/NkUCW2Ibbq6T2mQUKPJjzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bx8fag/btsDGkHgJHz/NkUCW2Ibbq6T2mQUKPJjzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bx8fag/btsDGkHgJHz/NkUCW2Ibbq6T2mQUKPJjzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbx8fag%2FbtsDGkHgJHz%2FNkUCW2Ibbq6T2mQUKPJjzk%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;780&quot; height=&quot;81&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;81&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;메인 이미지 출처 : 사진: &lt;a href=&quot;https://unsplash.com/ko/%EC%82%AC%EC%A7%84/%EC%82%B0%EB%A7%A5-%EB%84%88%EB%A8%B8%EB%A1%9C-%ED%95%B4%EA%B0%80-%EC%A7%80%EA%B3%A0-%EC%9E%88%EB%8B%A4--RlktmDy3Ec?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;Unsplash&lt;/a&gt;의&lt;a href=&quot;https://unsplash.com/ko/@neom?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash&quot;&gt;NEOM&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Git/GitHub</category>
      <category>! refs/heads/main:refs/heads/main [remote rejected] (refusing to allow a Personal Access Token to create or update workflow `.github/workflows/github-action.yml` without `workflow` scope)</category>
      <category>github token scope</category>
      <category>깃허브 ! refs/heads/main:refs/heads/main [remote rejected] (refusing to allow a Personal Access Token to create or update workflow `.github/workflows/github-action.yml` without `workflow` scope) 해결 방법</category>
      <category>깃허브 workflow</category>
      <category>깃허브 토큰 권한</category>
      <author>Seeminglyjs</author>
      <guid isPermaLink="true">https://seeminglyjs.tistory.com/590</guid>
      <comments>https://seeminglyjs.tistory.com/590#entry590comment</comments>
      <pubDate>Tue, 30 Jan 2024 09:44:39 +0900</pubDate>
    </item>
  </channel>
</rss>