<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>CastFox Tech Blog</title>
    <link>https://castfox.tistory.com/</link>
    <description>캐스트폭스 Tech 블로그</description>
    <language>ko</language>
    <pubDate>Wed, 8 Jul 2026 18:37:26 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>sironge</managingEditor>
    <image>
      <title>CastFox Tech Blog</title>
      <url>https://t1.daumcdn.net/cfile/tistory/233B80335704DA5925</url>
      <link>https://castfox.tistory.com</link>
    </image>
    <item>
      <title>트위터(X) 계정 서치 밴(섀도우 밴, Shadowban)  확인 및 테스트 사이트</title>
      <link>https://castfox.tistory.com/160</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1945&quot; data-origin-height=&quot;1354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QBBZT/dJMcahpKbcy/x6iyz8HYKKRfexdQNLqVC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QBBZT/dJMcahpKbcy/x6iyz8HYKKRfexdQNLqVC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QBBZT/dJMcahpKbcy/x6iyz8HYKKRfexdQNLqVC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQBBZT%2FdJMcahpKbcy%2Fx6iyz8HYKKRfexdQNLqVC0%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;1945&quot; height=&quot;1354&quot; data-origin-width=&quot;1945&quot; data-origin-height=&quot;1354&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;a href=&quot;https://www.castfox.com/&quot;&gt;https://www.castfox.com/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>컴퓨터</category>
      <category>섀도우밴</category>
      <category>서치밴</category>
      <author>sironge</author>
      <guid isPermaLink="true">https://castfox.tistory.com/160</guid>
      <comments>https://castfox.tistory.com/160#entry160comment</comments>
      <pubDate>Sun, 1 Feb 2026 18:56:45 +0900</pubDate>
    </item>
    <item>
      <title>[몰아보기] 배러레스트, 배러텐션, 배러애사비 장원영의 Pick! #잠안올때 #베러 #아이브 #장원영 #동화약품 #멜라토닌 #배러</title>
      <link>https://castfox.tistory.com/159</link>
      <description>&lt;div align=&quot;center&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/LvgvlETYN9g&quot; width=&quot;394&quot; height=&quot;700&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1755273900114&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;동화 배러레스트 120g, 120g, 10개 - 기타건강음료 | 쿠팡&quot; data-og-description=&quot;쿠팡에서 동화 배러레스트 120g, 120g, 10개 구매하고 더 많은 혜택을 받으세요! 지금 할인중인 다른 기타건강음료 제품도 바로 쿠팡에서 확인할 수 있습니다.&quot; data-og-host=&quot;www.coupang.com&quot; data-og-source-url=&quot;https://link.coupang.com/a/cKN5PJ&quot; data-og-url=&quot;https://www.coupang.com/vp/products/8787878580&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bBriy7/hyZyjFe06d/SanpRuXE33esmawNjCND90/img.jpg?width=492&amp;amp;height=492&amp;amp;face=0_0_492_492,https://scrap.kakaocdn.net/dn/bodwrW/hyZzxXo8xM/W8nh1MKI2vkwUZO4B8MKLK/img.jpg?width=492&amp;amp;height=492&amp;amp;face=0_0_492_492&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/cKN5PJ&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://link.coupang.com/a/cKN5PJ&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bBriy7/hyZyjFe06d/SanpRuXE33esmawNjCND90/img.jpg?width=492&amp;amp;height=492&amp;amp;face=0_0_492_492,https://scrap.kakaocdn.net/dn/bodwrW/hyZzxXo8xM/W8nh1MKI2vkwUZO4B8MKLK/img.jpg?width=492&amp;amp;height=492&amp;amp;face=0_0_492_492');&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;동화 배러레스트 120g, 120g, 10개 - 기타건강음료 | 쿠팡&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;쿠팡에서 동화 배러레스트 120g, 120g, 10개 구매하고 더 많은 혜택을 받으세요! 지금 할인중인 다른 기타건강음료 제품도 바로 쿠팡에서 확인할 수 있습니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coupang.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;&lt;span style=&quot;background-color: #ffffff; color: #3c3d3f; text-align: left;&quot;&gt;&quot;이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.&quot;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Youtube</category>
      <category>동화약품</category>
      <category>멜라토닌</category>
      <category>배러</category>
      <category>베러</category>
      <category>아이브</category>
      <category>잠안올때</category>
      <category>장원영</category>
      <author>sironge</author>
      <guid isPermaLink="true">https://castfox.tistory.com/159</guid>
      <comments>https://castfox.tistory.com/159#entry159comment</comments>
      <pubDate>Sat, 16 Aug 2025 01:07:47 +0900</pubDate>
    </item>
    <item>
      <title>Flutter 에서 PASS인증 붙이기 플러터[2025년 5월]</title>
      <link>https://castfox.tistory.com/158</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Flutter 에서 PASS인증 붙이기 플러터[2025년 5월]&lt;span style=&quot;color: #cccccc;&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_1747308097937&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:get/get.dart';
import '../controllers/pass_controller.dart';

class PassPage extends StatelessWidget {
  final String authUrl = APIConstants.appPassUrl;
  final String callbackUrl = APIConstants.appPassSuccessUrl;
  final String callbackUrl2 = APIConstants.appPassFailUrl;

  @override
  Widget build(BuildContext context) {
    final PassController controller = Get.find();
    InAppWebViewController? popupWebViewController;

    return Scaffold(
      body: InAppWebView(
        initialUrlRequest: URLRequest(url: WebUri(authUrl)),
        initialSettings: InAppWebViewSettings(
          javaScriptEnabled: true,
          javaScriptCanOpenWindowsAutomatically: true, // 팝업 여부
          useWideViewPort: true,
          supportZoom: true,
          builtInZoomControls: true,
          displayZoomControls: false,
          supportMultipleWindows: true, // 팝업 허용
          transparentBackground: false,
          disableDefaultErrorPage: true,
        ),
        onWebViewCreated: (InAppWebViewController webViewController) {
          controller.webViewController = webViewController;
        },
        onCreateWindow: (controller, createWindowRequest) async {
          await showDialog(
            context: context,
            barrierDismissible: false,
            builder: (context) =&amp;gt; Dialog(
              insetPadding: EdgeInsets.zero,
              backgroundColor: Colors.white,
              child: SizedBox(
                width: MediaQuery.of(context).size.width,
                height: MediaQuery.of(context).size.height,
                child: InAppWebView(
                  windowId: createWindowRequest.windowId,
                  initialSettings: InAppWebViewSettings(
                    javaScriptEnabled: true,
                  ),
                  onWebViewCreated: (InAppWebViewController webController) {
                    popupWebViewController = webController;
                  },
                  onLoadStop: (popupController, url) async {
                    if (url != null &amp;amp;&amp;amp; url.toString().startsWith(callbackUrl)) {
                      final uri = Uri.parse(url.toString());

                      final html = await popupController.getHtml();

                      final name = extractValueByLabel(html!, '성명');
                      final birth = extractValueByLabel(html, '생년월일(YYYYMMDD)');
                      final phone = extractValueByLabel(html, '휴대폰번호');

                      Navigator.of(context).pop();
                    }
                  },
                ),
              ),
            ),
          );
          return true;
        },
        onLoadStop: (InAppWebViewController webViewController, Uri? url) {
          // 이곳은 팝업창에서는 안 들어옴
          if (url != null &amp;amp;&amp;amp; url.toString().startsWith(callbackUrl)) {

          }
        },
      ),
    );
  }

  String? extractValueByLabel(String html, String label) {
    final regex = RegExp('&amp;lt;td&amp;gt;\\s*${RegExp.escape(label)}\\s*&amp;lt;\\/td&amp;gt;\\s*&amp;lt;td&amp;gt;([^&amp;lt;]*)&amp;lt;\\/td&amp;gt;', caseSensitive: false);
    final match = regex.firstMatch(html);
    return match?.group(1)?.trim();
  }
}

class PassController extends GetxController {
  // webViewController 변수 선언
  InAppWebViewController? webViewController;

  void handleAuthSuccess(String authToken) {
    print(&quot;인증 성공: $authToken&quot;);
    // TODO: 인증 토큰을 백엔드에 전달해 사용자 정보를 확인하세요.
  }

  void handleAuthFailure() {
    print(&quot;인증 실패&quot;);
    // TODO: 실패 처리 로직을 추가하세요.
  }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Mobile/FLUTTER</category>
      <category>flutter</category>
      <category>inappwebview</category>
      <category>pass인증</category>
      <category>Program</category>
      <category>프로그래밍</category>
      <category>플러터</category>
      <author>sironge</author>
      <guid isPermaLink="true">https://castfox.tistory.com/158</guid>
      <comments>https://castfox.tistory.com/158#entry158comment</comments>
      <pubDate>Thu, 15 May 2025 20:28:46 +0900</pubDate>
    </item>
    <item>
      <title>2025년 BEST AI툴</title>
      <link>https://castfox.tistory.com/157</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.youtube.com/shorts/G2rzk-Pp6RM&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/shorts/G2rzk-Pp6RM&lt;/a&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;텍스트작업 : 챗 GPT : &lt;a href=&quot;https://chat.openai.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://chat.openai.com/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;프리젠테이션 : 감마 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://gamma.app/&quot;&gt;https://gamma.app/&lt;/a&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;이미지생성 : 레오나르도 AI : &lt;a href=&quot;https://openart.ai/home&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://openart.ai/home&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1742011217297&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;AI 아트 제너레이터: 무료 AI 이미지 생성기 및 편집기 | OpenArt&quot; data-og-description=&quot;무료 사진 생성기 및 편집기로 AI 이미지 생성기를 살펴보세요.텍스트를 이미지로 변환하는 프롬프트를 사용하여 아이디어를 멋진 비주얼로 변환하는 데 적합합니다.&quot; data-og-host=&quot;openart-blog-posts.webflow.io&quot; data-og-source-url=&quot;https://openart.ai/home&quot; data-og-url=&quot;https://openart.ai/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dXIMaE/hyYrUzSvgI/6wvVn5fOK6rW29UlwG86c1/img.png?width=1200&amp;amp;height=630&amp;amp;face=928_285_982_345&quot;&gt;&lt;a href=&quot;https://openart.ai/home&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://openart.ai/home&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dXIMaE/hyYrUzSvgI/6wvVn5fOK6rW29UlwG86c1/img.png?width=1200&amp;amp;height=630&amp;amp;face=928_285_982_345');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;AI 아트 제너레이터: 무료 AI 이미지 생성기 및 편집기 | OpenArt&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;무료 사진 생성기 및 편집기로 AI 이미지 생성기를 살펴보세요.텍스트를 이미지로 변환하는 프롬프트를 사용하여 아이디어를 멋진 비주얼로 변환하는 데 적합합니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;openart-blog-posts.webflow.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;p data-ke-size=&quot;size16&quot;&gt;음악제작 : 수노 :&lt;a href=&quot;https://suno.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt; https://suno.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1742011200111&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;Suno&quot; data-og-description=&quot;Suno is building a future where anyone can make great music.&quot; data-og-host=&quot;suno.com&quot; data-og-source-url=&quot;https://suno.com/&quot; data-og-url=&quot;https://suno.com/home&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/6mQAh/hyYqYXe09l/eYt4hhFGe1xhK5Aj02jnek/img.jpg?width=2880&amp;amp;height=1620&amp;amp;face=0_0_2880_1620,https://scrap.kakaocdn.net/dn/bmNt06/hyYqdNxlt2/12tpDwRId49vSziFFbAvpK/img.jpg?width=2880&amp;amp;height=1620&amp;amp;face=0_0_2880_1620&quot;&gt;&lt;a href=&quot;https://suno.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://suno.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/6mQAh/hyYqYXe09l/eYt4hhFGe1xhK5Aj02jnek/img.jpg?width=2880&amp;amp;height=1620&amp;amp;face=0_0_2880_1620,https://scrap.kakaocdn.net/dn/bmNt06/hyYqdNxlt2/12tpDwRId49vSziFFbAvpK/img.jpg?width=2880&amp;amp;height=1620&amp;amp;face=0_0_2880_1620');&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;Suno&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Suno is building a future where anyone can make great music.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;suno.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;마인드맵 : 맵피파이 : &lt;a href=&quot;https://mapify.so/ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://mapify.so/ko&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1742011207367&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;Mapify: AI Mind Map Summarizer&quot; data-og-description=&quot;Summarize anything into a clear, structured mind map. Simplify complexity and boost your productivity 10x.&quot; data-og-host=&quot;mapify.so&quot; data-og-source-url=&quot;https://mapify.so/ko&quot; data-og-url=&quot;https://mapify.so&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bpauhu/hyYr1Z4DTf/bB8tSNVWaakN8aMPVXZwPK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/YndcI/hyYqbPJQCO/SSbaqYPDKkr233cbsuQDX0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/Nxhda/hyYqWrzjMq/uS2bziPJWkyrJR6Mmyremk/img.jpg?width=2817&amp;amp;height=1857&amp;amp;face=0_0_2817_1857&quot;&gt;&lt;a href=&quot;https://mapify.so/ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mapify.so/ko&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bpauhu/hyYr1Z4DTf/bB8tSNVWaakN8aMPVXZwPK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/YndcI/hyYqbPJQCO/SSbaqYPDKkr233cbsuQDX0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/Nxhda/hyYqWrzjMq/uS2bziPJWkyrJR6Mmyremk/img.jpg?width=2817&amp;amp;height=1857&amp;amp;face=0_0_2817_1857');&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;Mapify: AI Mind Map Summarizer&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Summarize anything into a clear, structured mind map. Simplify complexity and boost your productivity 10x.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mapify.so&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;로고 : 리크레프트 : &lt;a href=&quot;https://www.recraft.ai/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.recraft.ai/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1742011203641&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;Infinite AI Artboard - Recraft&quot; data-og-description=&quot;Premium image generation and editing tool. Store and share your own styles, create, fine-tune, upscale, and perfect your visuals.&quot; data-og-host=&quot;www.recraft.ai&quot; data-og-source-url=&quot;https://www.recraft.ai/&quot; data-og-url=&quot;https://www.recraft.ai/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ea1iyi/hyYqcunLbZ/ly890VZIK3qaGi0iokoEk1/img.jpg?width=968&amp;amp;height=504&amp;amp;face=0_0_968_504,https://scrap.kakaocdn.net/dn/bL04uh/hyYqOUCLBb/NQ0qBPqEODpDxKDt3G2nL0/img.jpg?width=968&amp;amp;height=504&amp;amp;face=0_0_968_504,https://scrap.kakaocdn.net/dn/TG4BF/hyYqQkBp4n/GTzqp5jo4UIWOehmgnSzrk/img.jpg?width=968&amp;amp;height=504&amp;amp;face=0_0_968_504&quot;&gt;&lt;a href=&quot;https://www.recraft.ai/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.recraft.ai/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ea1iyi/hyYqcunLbZ/ly890VZIK3qaGi0iokoEk1/img.jpg?width=968&amp;amp;height=504&amp;amp;face=0_0_968_504,https://scrap.kakaocdn.net/dn/bL04uh/hyYqOUCLBb/NQ0qBPqEODpDxKDt3G2nL0/img.jpg?width=968&amp;amp;height=504&amp;amp;face=0_0_968_504,https://scrap.kakaocdn.net/dn/TG4BF/hyYqQkBp4n/GTzqp5jo4UIWOehmgnSzrk/img.jpg?width=968&amp;amp;height=504&amp;amp;face=0_0_968_504');&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;Infinite AI Artboard - Recraft&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Premium image generation and editing tool. Store and share your own styles, create, fine-tune, upscale, and perfect your visuals.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.recraft.ai&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;여행계획 : 제미나이 : &lt;a href=&quot;https://gemini.google.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://gemini.google.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1742011207009&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;lrm;Gemini - 대화를 통해 아이디어를 강화하세요&quot; data-og-description=&quot;Bard가 Gemini로 바뀌었습니다. Google AI의 도움을 받아 글을 쓰고, 계획하고, 학습해 보세요.&quot; data-og-host=&quot;gemini.google.com&quot; data-og-source-url=&quot;https://gemini.google.com/&quot; data-og-url=&quot;https://gemini.google.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/g59rR/hyYq0U1kmJ/PBZgrgq1DKWebr3NElJOo0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/CEshM/hyYqUtMWBy/0sdrFNVojJyPLkGatKxam0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://gemini.google.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://gemini.google.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/g59rR/hyYq0U1kmJ/PBZgrgq1DKWebr3NElJOo0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/CEshM/hyYqUtMWBy/0sdrFNVojJyPLkGatKxam0/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;lrm;Gemini - 대화를 통해 아이디어를 강화하세요&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Bard가 Gemini로 바뀌었습니다. Google AI의 도움을 받아 글을 쓰고, 계획하고, 학습해 보세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;gemini.google.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;회의록 작성 : 클로바 노트 : &lt;a href=&quot;https://clovanote.naver.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://clovanote.naver.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1742011208006&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;https://clovanote.naver.com&quot; data-og-description=&quot;Record more than just voice&quot; data-og-host=&quot;clovanote.naver.com&quot; data-og-source-url=&quot;https://clovanote.naver.com/&quot; data-og-url=&quot;https://clovanote.naver.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/kUo9i/hyYqMbqXXs/LRFIdq74txKKnY8iwzxnEK/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/dCmZc0/hyYqWrzjZI/ExztWDkYvc02kvZxrx18q0/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400&quot;&gt;&lt;a href=&quot;https://clovanote.naver.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://clovanote.naver.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/kUo9i/hyYqMbqXXs/LRFIdq74txKKnY8iwzxnEK/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/dCmZc0/hyYqWrzjZI/ExztWDkYvc02kvZxrx18q0/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400');&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;https://clovanote.naver.com&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Record more than just voice&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;clovanote.naver.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;목소리 더빙 : 타입캐스트 : &lt;a href=&quot;https://typecast.ai/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://typecast.ai/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1742011209427&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;Online AI Voice Generator &amp;amp; Content Creation Tool&quot; data-og-description=&quot;Exceptional naturalness and expressiveness Our proprietary model achieves indistinguishable speech quality and is capable of reproducing both unique speaker characteristics and various emotions accurately, maintaining naturalness across different sentences&quot; data-og-host=&quot;typecast.ai&quot; data-og-source-url=&quot;https://typecast.ai/&quot; data-og-url=&quot;https://typecast.ai/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/82zG8/hyYrSvjnOc/OlOlxjcTu1Ea2ZoTb3nlPk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://typecast.ai/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://typecast.ai/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/82zG8/hyYrSvjnOc/OlOlxjcTu1Ea2ZoTb3nlPk/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;Online AI Voice Generator &amp;amp; Content Creation Tool&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Exceptional naturalness and expressiveness Our proprietary model achieves indistinguishable speech quality and is capable of reproducing both unique speaker characteristics and various emotions accurately, maintaining naturalness across different sentences&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;typecast.ai&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>AI</category>
      <category>AI툴</category>
      <category>감마</category>
      <category>레오나르도ai</category>
      <category>리크레프트</category>
      <category>맵피파이</category>
      <category>수노</category>
      <category>제미나이</category>
      <category>챗gpt</category>
      <category>클로바노트</category>
      <category>타입캐스트</category>
      <author>sironge</author>
      <guid isPermaLink="true">https://castfox.tistory.com/157</guid>
      <comments>https://castfox.tistory.com/157#entry157comment</comments>
      <pubDate>Sat, 15 Mar 2025 12:57:34 +0900</pubDate>
    </item>
    <item>
      <title>iOS와 Android에서 패키지명(번들 ID) 규칙</title>
      <link>https://castfox.tistory.com/156</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;iOS와 Android에서 패키지명(번들 ID) 규칙은 아래와 같습니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. iOS (Bundle Identifier)&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&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&gt;도메인 네이밍 방식을 따름 (예: com.companyname.appname)&lt;/li&gt;
&lt;li&gt;소문자로 작성 (com.example.myapp)&lt;/li&gt;
&lt;li&gt;특수 문자 및 공백 불가 (언더스코어 _ 사용 X)&lt;/li&gt;
&lt;li&gt;숫자 사용 가능하지만 맨 앞에 올 수 없음 (com.example.123app ❌)&lt;/li&gt;
&lt;li&gt;점(.)을 구분자로 사용 (최소 2개 이상)&lt;/li&gt;
&lt;li&gt;앱스토어에 동일한 Bundle ID가 등록되어 있으면 중복 사용 불가&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&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&gt;com.castfox.myapp&lt;/li&gt;
&lt;li&gt;io.github.castfox&lt;/li&gt;
&lt;li&gt;com.companyname.productname&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&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&gt;애플 개발자 계정에 등록 후 변경 불가&lt;/li&gt;
&lt;li&gt;App Store 등록 시 Bundle ID가 고유해야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. Android (Application ID / Package Name)&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&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&gt;Java 패키지 네이밍 방식 사용 (예: com.companyname.appname)&lt;/li&gt;
&lt;li&gt;소문자로 작성 (com.example.myapp)&lt;/li&gt;
&lt;li&gt;특수 문자 및 공백 불가 (언더스코어 _ 사용 X)&lt;/li&gt;
&lt;li&gt;숫자 사용 가능하지만 맨 앞에 올 수 없음 (com.example.123app ❌)&lt;/li&gt;
&lt;li&gt;점(.)을 구분자로 사용 (최소 2개 이상)&lt;/li&gt;
&lt;li&gt;동일한 패키지명을 Play Store에 등록한 경우 중복 불가&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&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&gt;com.castfox.myapp&lt;/li&gt;
&lt;li&gt;com.companyname.productname&lt;/li&gt;
&lt;li&gt;io.github.castfox&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&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&gt;패키지명 변경 가능하지만 Google Play에 등록한 경우 변경 불가&lt;/li&gt;
&lt;li&gt;Proguard 사용 시 패키지명 난독화 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;공통 사항&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;iOS와 Android 모두 패키지명/번들 ID는 고유해야 함.&lt;/li&gt;
&lt;li&gt;일반적으로 &lt;b&gt;회사 도메인을 반대로 배치&lt;/b&gt;하여 사용 (com.company.appname)&lt;/li&gt;
&lt;li&gt;개발 및 테스트 환경에서 구분을 위해 &lt;b&gt;접미사 사용 가능&lt;/b&gt; (com.company.appname.dev, com.company.appname.beta)&lt;/li&gt;
&lt;li&gt;회사 도메인이 없을 경우 io.github.username.appname 형태로 사용 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;추가 예시&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;플랫폼 올바른 예시 잘못된 예시&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;iOS&lt;/td&gt;
&lt;td&gt;com.castfox.app&lt;/td&gt;
&lt;td&gt;castfox app (공백)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Android&lt;/td&gt;
&lt;td&gt;com.castfox.app&lt;/td&gt;
&lt;td&gt;123app.castfox.com (숫자 앞에 위치)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;공통&lt;/td&gt;
&lt;td&gt;io.github.username.appname&lt;/td&gt;
&lt;td&gt;com.example..app (연속된 점)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;iOS와 Android 모두 &lt;b&gt;고유한 패키지명&lt;/b&gt;을 설정하는 것이 중요합니다.&lt;/p&gt;</description>
      <category>Mobile</category>
      <category>Android</category>
      <category>IOS</category>
      <category>번들id</category>
      <category>패키지명</category>
      <author>sironge</author>
      <guid isPermaLink="true">https://castfox.tistory.com/156</guid>
      <comments>https://castfox.tistory.com/156#entry156comment</comments>
      <pubDate>Thu, 13 Mar 2025 10:00:41 +0900</pubDate>
    </item>
    <item>
      <title>네이버, 저비용 고성능 AI '하이퍼클로바X' 공개</title>
      <link>https://castfox.tistory.com/155</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;네이버가 글로벌 AI 경쟁의 판도를 바꿀 혁신적 모델, &amp;lsquo;하이퍼클로바X&amp;rsquo;를 공개했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 모델은 기존 모델 대비 매개변수 규모를 약 40% 축소한 소형 모델임에도 불구하고, 최신 알고리즘과 데이터 학습을 통해 뛰어난 언어 이해와 추론 능력을 구현해냈다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주요 학습 분야인 한국어, 영어, 코딩, 수학 등에서 19개 벤치마크를 통해 종합 성능을 평가한 결과, 모든 분야에서 평균 점수가 기존 모델을 능가하며 글로벌 빅테크 기업들이 선보이는 모델과 견줄 만한 경쟁력을 입증했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 MMLU 벤치마크에서 79.6%의 정답률을 기록한 점은, AI 모델의 정확성과 신뢰성을 강조하는 구글 CEO의 기술 철학과도 맥을 같이한다.&lt;/p&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;lsquo;멀티 모달리티&amp;rsquo; 기능을 대폭 고도화해, 이미지와 그래프뿐만 아니라 영상 정보까지도 체계적으로 이해할 수 있도록 개선했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 기능 확장은 인공지능이 다양한 형태의 데이터를 동시에 처리하며, 사용자 경험을 극대화하는 데 중요한 역할을 할 것으로 기대된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업데이트된 하이퍼클로바X는 3월 중 대화형 AI 서비스 &amp;lsquo;클로바X&amp;rsquo;에 탑재되어 일반 사용자에게 직관적이고 몰입감 있는 AI 경험을 제공할 예정이며, 네이버 클라우드 플랫폼의 하이퍼스케일 AI 개발 도구 &amp;lsquo;클로바 스튜디오&amp;rsquo;를 통해 기업 고객에게도 서비스가 확대될 계획이다. 이는 지난해 발표한 &amp;lsquo;온 서비스 AI&amp;rsquo; 전략의 연장선으로, 비용 효율성과 고성능 AI 구현을 동시에 추구하는 혁신적 접근 방식을 보여준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더불어 네이버는 지난 8월 텍스트와 이미지를 동시에 처리하는 &amp;lsquo;하이퍼클로바X 비전&amp;rsquo; 모델을 공개한 바 있으며, 현재는 사용자가 요청한 다양한 작업을 체계적이고 종합적으로 수행할 수 있는 계획 수립 및 추론 능력 고도화 기술 개발에 주력하고 있다. 하반기에는 자연스러운 음성 대화가 가능한 하이퍼클로바X 모델도 선보일 예정으로, AI 기술의 경계를 한층 더 넓힐 전망이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네이버 클라우드 하이퍼스케일 AI 기술 총괄은 &amp;ldquo;글로벌 기술 리더들이 주목하는 저비용 고성능 AI 모델 구현은 향후 AI 시장 경쟁에서 결정적인 역할을 할 것&amp;rdquo;이라며, &amp;ldquo;이번 신모델이 더 많은 사용자와 기업에 차별화된 AI 서비스 경험을 제공하고, 구글을 비롯한 글로벌 경쟁자들과 어깨를 나눌 수 있는 기술적 토대를 마련하는 중요한 발판이 되기를 기대한다&amp;rdquo;고 평가했다.&lt;/p&gt;</description>
      <category>AI</category>
      <category>AI</category>
      <category>네이버</category>
      <category>인공지능</category>
      <category>하이퍼클로바X</category>
      <author>sironge</author>
      <guid isPermaLink="true">https://castfox.tistory.com/155</guid>
      <comments>https://castfox.tistory.com/155#entry155comment</comments>
      <pubDate>Sun, 23 Feb 2025 02:08:25 +0900</pubDate>
    </item>
    <item>
      <title>Putty 사용 중 연결이 끊기는 현상 해결 방법</title>
      <link>https://castfox.tistory.com/154</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;PuTTY 사용 중 연결이 끊기는 현상을 해결하기 위해 다음과 같은 방법을 시도해 볼 수 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. Keepalive 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PuTTY의 Keepalive 설정을 통해 서버와의 연결을 유지할 수 있습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;PuTTY를 실행합니다.&lt;/li&gt;
&lt;li&gt;좌측 카테고리에서 &lt;b&gt;Connection&lt;/b&gt;을 선택합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Sending of null packets to keep session active&lt;/b&gt; 부분에 10-60초 정도의 간격으로 시간을 설정합니다. 예를 들어, 30초로 설정하려면 30을 입력합니다.&lt;/li&gt;
&lt;li&gt;설정을 저장하려면 좌측 카테고리에서 &lt;b&gt;Session&lt;/b&gt;을 선택한 다음, 설정을 저장할 세션 이름을 선택하고 &lt;b&gt;Save&lt;/b&gt;를 클릭합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. SSH 서버 설정 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버 측에서 연결을 유지하는 설정이 필요할 수 있습니다. 서버의 SSH 설정 파일 (/etc/ssh/sshd_config)을 수정합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;서버에 접속하여 SSH 설정 파일을 엽니다.
&lt;div&gt;
&lt;div&gt;sudo nano /etc/ssh/sshd_config&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;다음 설정이 있는지 확인하고, 없다면 추가합니다.
&lt;div&gt;
&lt;div&gt;ClientAliveInterval 60 ClientAliveCountMax 3&lt;/div&gt;
&lt;/div&gt;
이 설정은 60초마다 클라이언트에 활성 상태를 확인하는 패킷을 보내며, 최대 3번의 응답을 기다립니다.&lt;/li&gt;
&lt;li&gt;SSH 서버를 재시작합니다.
&lt;div&gt;
&lt;div&gt;sudo systemctl restart sshd&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 네트워크 설정 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;/li&gt;
&lt;li&gt;라우터 또는 방화벽 설정에서 비활성화된 연결을 자동으로 종료하는 설정이 있는지 확인합니다.&lt;/li&gt;
&lt;li&gt;ISP(인터넷 서비스 제공자)에서 일정 시간 후에 비활성 연결을 끊는 설정이 있는지 확인합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. PuTTY 로그 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PuTTY의 로그를 확인하여 문제의 원인을 파악할 수 있습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;PuTTY를 실행합니다.&lt;/li&gt;
&lt;li&gt;좌측 카테고리에서 &lt;b&gt;Session&lt;/b&gt;을 선택합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Logging&lt;/b&gt;을 선택합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Printable output&lt;/b&gt; 또는 &lt;b&gt;All session output&lt;/b&gt;을 선택하고, 로그 파일 경로를 지정합니다.&lt;/li&gt;
&lt;li&gt;로그 파일을 확인하여 문제의 원인을 파악합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 다른 SSH 클라이언트 사용&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PuTTY 외에도 다른 SSH 클라이언트를 사용해 볼 수 있습니다. 예를 들어, Windows 10 이상에서는 내장된 OpenSSH 클라이언트를 사용할 수 있습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Windows PowerShell 또는 명령 프롬프트를 엽니다.&lt;/li&gt;
&lt;li&gt;다음 명령을 입력하여 SSH 연결을 시도합니다.
&lt;div&gt;
&lt;div&gt;ssh username@hostname&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방법들을 통해 PuTTY 사용 중 연결이 끊기는 문제를 해결할 수 있을 것입니다. 문제가 지속된다면, 네트워크 관리자나 서버 관리자에게 추가적인 도움을 요청하는 것이 좋습니다.&lt;/p&gt;</description>
      <category>Server</category>
      <category>KEEPALIVE</category>
      <category>putty</category>
      <category>ssh</category>
      <category>telnet</category>
      <category>서버끊김</category>
      <author>sironge</author>
      <guid isPermaLink="true">https://castfox.tistory.com/154</guid>
      <comments>https://castfox.tistory.com/154#entry154comment</comments>
      <pubDate>Thu, 11 Jul 2024 18:25:41 +0900</pubDate>
    </item>
    <item>
      <title>github.io 블로그 만들어서 포폴페이지 만들려고 하는데, jekyll을 추가해야하는 건지? 그냥 파일 업로드해도 되는건지</title>
      <link>https://castfox.tistory.com/153</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;GitHub&amp;nbsp;Pages를&amp;nbsp;사용하여&amp;nbsp;블로그를&amp;nbsp;만들&amp;nbsp;때,&amp;nbsp;Jekyll을&amp;nbsp;사용하는&amp;nbsp;것이&amp;nbsp;필수는&amp;nbsp;아닙니다.&amp;nbsp;Jekyll은&amp;nbsp;GitHub&amp;nbsp;Pages에서&amp;nbsp;기본으로&amp;nbsp;지원되는&amp;nbsp;정적&amp;nbsp;사이트&amp;nbsp;생성기이지만,&amp;nbsp;꼭&amp;nbsp;사용해야&amp;nbsp;하는&amp;nbsp;것은&amp;nbsp;아닙니다. &lt;br /&gt;&lt;br /&gt;HTML,&amp;nbsp;CSS,&amp;nbsp;JavaScript&amp;nbsp;파일을&amp;nbsp;직접&amp;nbsp;만들어서&amp;nbsp;GitHub&amp;nbsp;저장소에&amp;nbsp;업로드하여&amp;nbsp;GitHub&amp;nbsp;Pages를&amp;nbsp;호스팅할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;이를&amp;nbsp;위해&amp;nbsp;다음과&amp;nbsp;같은&amp;nbsp;단계를&amp;nbsp;따르세요: &lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;GitHub에&amp;nbsp;새로운&amp;nbsp;저장소를&amp;nbsp;생성합니다.&amp;nbsp;저장소&amp;nbsp;이름은&amp;nbsp;'yourusername.github.io'&amp;nbsp;형식이어야&amp;nbsp;합니다.&amp;nbsp;여기서&amp;nbsp;'yourusername'은&amp;nbsp;GitHub&amp;nbsp;사용자&amp;nbsp;이름입니다. &lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;저장소에&amp;nbsp;index.html&amp;nbsp;파일을&amp;nbsp;추가합니다.&amp;nbsp;이&amp;nbsp;파일이&amp;nbsp;사이트의&amp;nbsp;메인&amp;nbsp;페이지가&amp;nbsp;됩니다. &lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;필요한&amp;nbsp;경우&amp;nbsp;CSS,&amp;nbsp;JavaScript,&amp;nbsp;이미지&amp;nbsp;등의&amp;nbsp;추가&amp;nbsp;파일을&amp;nbsp;업로드합니다.&amp;nbsp;웹&amp;nbsp;사이트에&amp;nbsp;필요한&amp;nbsp;모든&amp;nbsp;파일을&amp;nbsp;포함시키세요. &lt;br /&gt;&lt;br /&gt;4.&amp;nbsp;저장소&amp;nbsp;설정에서&amp;nbsp;GitHub&amp;nbsp;Pages&amp;nbsp;섹션을&amp;nbsp;찾아&amp;nbsp;'main'&amp;nbsp;브랜치를&amp;nbsp;선택하고,&amp;nbsp;저장합니다. &lt;br /&gt;&lt;br /&gt;5.&amp;nbsp;몇&amp;nbsp;분&amp;nbsp;후에&amp;nbsp;웹&amp;nbsp;사이트가&amp;nbsp;생성되고&amp;nbsp;'&lt;a href=&quot;https://yourusername.github.io'&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://yourusername.github.io'&lt;/a&gt;&amp;nbsp;주소에서&amp;nbsp;접속&amp;nbsp;가능해집니다. &lt;br /&gt;&lt;br /&gt;이&amp;nbsp;방법을&amp;nbsp;사용하면&amp;nbsp;Jekyll을&amp;nbsp;사용하지&amp;nbsp;않고도&amp;nbsp;GitHub&amp;nbsp;Pages를&amp;nbsp;호스팅할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;그러나&amp;nbsp;Jekyll을&amp;nbsp;사용하면&amp;nbsp;정적&amp;nbsp;사이트&amp;nbsp;생성에&amp;nbsp;있어&amp;nbsp;여러&amp;nbsp;가지&amp;nbsp;편리한&amp;nbsp;기능을&amp;nbsp;활용할&amp;nbsp;수&amp;nbsp;있으니,&amp;nbsp;필요에&amp;nbsp;따라&amp;nbsp;고려해보세요.&lt;/p&gt;</description>
      <category>컴퓨터</category>
      <category>CSS</category>
      <category>github</category>
      <category>HTML</category>
      <category>깃허브</category>
      <category>포트폴리오</category>
      <author>sironge</author>
      <guid isPermaLink="true">https://castfox.tistory.com/153</guid>
      <comments>https://castfox.tistory.com/153#entry153comment</comments>
      <pubDate>Tue, 9 May 2023 13:47:15 +0900</pubDate>
    </item>
    <item>
      <title>CollectionViewCompositionalLayout 아이템간 간격을 주고싶습니다.</title>
      <link>https://castfox.tistory.com/152</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;CollectionViewCompositionalLayout은&amp;nbsp;간격을&amp;nbsp;조정하는&amp;nbsp;여러&amp;nbsp;가지&amp;nbsp;방법이&amp;nbsp;있습니다.&amp;nbsp;item&amp;nbsp;간의&amp;nbsp;간격,&amp;nbsp;section&amp;nbsp;간의&amp;nbsp;간격,&amp;nbsp;header&amp;nbsp;및&amp;nbsp;footer의&amp;nbsp;크기와&amp;nbsp;간격&amp;nbsp;등을&amp;nbsp;조정할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;item&amp;nbsp;간의&amp;nbsp;간격을&amp;nbsp;조정하려면&amp;nbsp;NSCollectionLayoutSpacing&amp;nbsp;객체를&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;이&amp;nbsp;객체는&amp;nbsp;space,&amp;nbsp;lineSpacing,&amp;nbsp;and&amp;nbsp;interItemSpacing&amp;nbsp;같은&amp;nbsp;여러가지&amp;nbsp;속성을&amp;nbsp;가지고&amp;nbsp;있으며,&amp;nbsp;이를&amp;nbsp;조정함으로써&amp;nbsp;item&amp;nbsp;간의&amp;nbsp;간격을&amp;nbsp;조정할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;예를&amp;nbsp;들어,&amp;nbsp;아래&amp;nbsp;코드는&amp;nbsp;NSCollectionLayoutSpacing을&amp;nbsp;사용하여&amp;nbsp;각&amp;nbsp;item&amp;nbsp;간의&amp;nbsp;간격을&amp;nbsp;10으로&amp;nbsp;설정하는&amp;nbsp;방법을&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;Swift 코드&lt;/p&gt;
&lt;pre id=&quot;code_1683187588817&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(0.25), heightDimension: .fractionalHeight(1.0))
let item = NSCollectionLayoutItem(layoutSize: itemSize)

let itemSpacing = CGFloat(10)
let groupSpacing = CGFloat(10)

let groupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0), heightDimension: .absolute(50))
let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item])

let section = NSCollectionLayoutSection(group: group)
section.interGroupSpacing = groupSpacing
section.contentInsets = NSDirectionalEdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0)
section.interGroupSpacing = groupSpacing
section.contentInsets = NSDirectionalEdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0)

let spacing = NSCollectionLayoutSpacing.fixed(itemSpacing)
section.contentInsets.bottom = itemSpacing // 종료 item의 마진 주기
section.interItemSpacing = spacing

let layout = UICollectionViewCompositionalLayout(section: section)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;따라서,&amp;nbsp;item의&amp;nbsp;contentInset을&amp;nbsp;조정하지&amp;nbsp;않고도&amp;nbsp;item&amp;nbsp;간의&amp;nbsp;간격을&amp;nbsp;조정할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;</description>
      <category>Mobile/iOS</category>
      <category>CollectionViewCompositionalLayout</category>
      <category>IOS</category>
      <category>iPhone</category>
      <category>mobile</category>
      <category>아이폰개발</category>
      <author>sironge</author>
      <guid isPermaLink="true">https://castfox.tistory.com/152</guid>
      <comments>https://castfox.tistory.com/152#entry152comment</comments>
      <pubDate>Thu, 4 May 2023 17:07:25 +0900</pubDate>
    </item>
    <item>
      <title>안드로이드앱 aab파일 업로드 해서 플레이스토어에서 업데이트가 됬는데, 오류를 발견해서 이전 버전으로 롤백 시키려고 하는데 방법이 있나요?</title>
      <link>https://castfox.tistory.com/151</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Google Play Console을 사용하여 Google Play 스토어에서 앱의 이전 버전으로 롤백할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방법은 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Google Play Console(https://play.google.com/console/)로 이동합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Google 계정으로 로그인합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 롤백할 앱을 선택합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 왼쪽 메뉴에서 &quot;프로덕션&quot; 섹션 아래의 &quot;릴리스&quot;를 클릭합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. &quot;출시 내역&quot; 탭을 찾아 클릭합니다. 이전 릴리스 목록이 표시되어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 롤백하려는 릴리스를 찾고 해당 릴리스 오른쪽에 있는 점 3개로 된 메뉴를 클릭합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 드롭다운 메뉴에서 &quot;이 릴리스로 롤백&quot;을 클릭합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. 선택한 버전의 새 초안 릴리스로 이동합니다. 릴리스 정보 및 기타 필요한 세부 정보를 검토합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9. &quot;Review release&quot;를 클릭한 다음 &quot;Roll out release&quot;를 클릭하여 사용자가 선택한 버전을 사용할 수 있도록 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;롤백된 버전을 Play 스토어에서 사용할 수 있게 되려면 몇 시간이 걸릴 수 있습니다. 문제가 있는 버전으로 이미 업데이트한 사용자의 경우 이전 버전으로 롤백해도 문제가 해결되지 않을 수 있습니다.&lt;/p&gt;
&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;</description>
      <category>Mobile/Android</category>
      <category>aab</category>
      <category>Android</category>
      <category>롤백</category>
      <category>안드로이드</category>
      <author>sironge</author>
      <guid isPermaLink="true">https://castfox.tistory.com/151</guid>
      <comments>https://castfox.tistory.com/151#entry151comment</comments>
      <pubDate>Sun, 30 Apr 2023 17:32:51 +0900</pubDate>
    </item>
  </channel>
</rss>