<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>\document</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Tue, 05 May 2026 15:41:16 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>\document</title>
            <url>https://velog.velcdn.com/images/jeongmin-0113/profile/fe01d640-cc11-477b-b7da-48e05985f0ba/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. \document. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/jeongmin-0113" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[Compose] 한 텍스트에 각각 다른 스타일 적용하기]]></title>
            <link>https://velog.io/@jeongmin-0113/Compose-%ED%95%9C-%ED%85%8D%EC%8A%A4%ED%8A%B8%EC%97%90-%EA%B0%81%EA%B0%81-%EB%8B%A4%EB%A5%B8-%EC%8A%A4%ED%83%80%EC%9D%BC-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@jeongmin-0113/Compose-%ED%95%9C-%ED%85%8D%EC%8A%A4%ED%8A%B8%EC%97%90-%EA%B0%81%EA%B0%81-%EB%8B%A4%EB%A5%B8-%EC%8A%A4%ED%83%80%EC%9D%BC-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0</guid>
            <pubDate>Tue, 05 May 2026 15:41:16 GMT</pubDate>
            <description><![CDATA[<h2 id="결과물">결과물</h2>
<p><img src="https://velog.velcdn.com/images/jeongmin-0113/post/9e44fa66-9653-4c3b-a342-e4f88a2ebabb/image.gif" alt=""></p>
<h2 id="적용하기">적용하기</h2>
<p>한 텍스트 컴포저블 내에 각각 다른 스타일을 적용하려면 buildAnnotatedString과 withStyle, append를 사용한다.</p>
<p>텍스트의 text 부분에 buildAnnotatedString으로 특수한 스타일을 적용하고 싶은 부분을 withStyle+append로, 기본 스타일을 적용할 부분은 그냥 append로 설정한다. </p>
<pre><code class="language-kotlin">Text(
    text = buildAnnotatedString {
        // withStyle로 특수한 스타일을 추가로 적용한다.
        withStyle(SpanStyle(color = selected.color)) { append(&quot;포인트 컬러&quot;) }
        // withStyle로 감싸지 않으면 Text에 적용한 스타일을 그대로 적용한다.
        append(&quot;를 선택하세요&quot;)
    },
    style = MaterialTheme.typography.headlineSmall.copy(
        fontWeight = FontWeight.Bold
    ),
    color = Color.White
)</code></pre>
<p>withStyle로 감싸지 않은 append 텍스트는 Text 컴포저블에서 설정한 style을, withStyle로 감싼 텍스트는 Text 컴포저블에서 설정한 style에 SpanStyle로 지정한 부분만 바뀐다.</p>
<p><img src="https://velog.velcdn.com/images/jeongmin-0113/post/71c26a1f-aebf-4293-b95e-4bd5f874dc99/image.gif" alt=""></p>
<p>SpanStyle을 통해 다음과 같이 여러 스타일을 지정할 수 있다.</p>
<pre><code class="language-kotlin">public constructor SpanStyle(
    color: Color = Color.Unspecified,
    fontSize: TextUnit = TextUnit.Unspecified,
    fontWeight: FontWeight? = null,
    fontStyle: FontStyle? = null,
    fontSynthesis: FontSynthesis? = null,
    fontFamily: FontFamily? = null,
    fontFeatureSettings: String? = null,
    letterSpacing: TextUnit = TextUnit.Unspecified,
    baselineShift: BaselineShift? = null,
    textGeometricTransform: TextGeometricTransform? = null,
    localeList: LocaleList? = null,
    background: Color = Color.Unspecified,
    textDecoration: TextDecoration? = null,
    shadow: Shadow? = null,
    platformStyle: PlatformSpanStyle? = null,
    drawStyle: DrawStyle? = null
)</code></pre>
<h2 id="추가-적용---컬러-변경-애니메이션">추가 적용 - 컬러 변경 애니메이션</h2>
<p>포인트 컬러를 선택할 때마다 글씨 색상도 바뀌는데, 끊기듯 확 변하는 게 어색해보여서 전환 애니메이션을 추가했다.</p>
<pre><code class="language-kotlin">// 선택된 컬러 변경 시 0.5초 동안 부드럽게 색상 전환
val animatedColor by animateColorAsState(
    targetValue = selected.color,
    animationSpec = tween(durationMillis = 500),
    label = &quot;colorAnimation&quot;
)</code></pre>
<p>포인트 컬러로 강조된 텍스트의 color를 animatedColor로 바꾸면 애니메이션이 적용된다.</p>
<pre><code class="language-kotlin">...
withStyle(SpanStyle(color = animatedColor)) {
...</code></pre>
<p><img src="https://velog.velcdn.com/images/jeongmin-0113/post/89b0d383-a4cc-442c-bf70-83f09017ddb5/image.gif" alt=""></p>
<h2 id="전체-코드">전체 코드</h2>
<pre><code class="language-kotlin">// 색상 데이터 클래스
enum class AccentColor(val color: Color) {
    Red(Color(0xFFEF5350)),
    Blue(Color(0xFF42A5F5)),
    Green(Color(0xFF66BB6A)),
    Yellow(Color(0xFFFFCA28)),
    Purple(Color(0xFFAB47BC))
}

// 포인트 색상 선택 컴포저블
@Composable
fun AccentColorPicker() {
    val colorScrollState = rememberScrollState()
    var selected by remember { mutableStateOf(AccentColor.Blue) }

    // 색상 변경 애니메이션
    val animatedColor by animateColorAsState(
        targetValue = selected.color,
        animationSpec = tween(durationMillis = 500),
        label = &quot;colorAnimation&quot;
    )

    Column(
        modifier = Modifier
            .fillMaxWidth()
            .padding(16.dp)
    ) {
        Text(
            text = buildAnnotatedString {
                withStyle(SpanStyle(color = selected.color)) {
                    append(&quot;포인트 컬러&quot;)
                }
                append(&quot;를 선택하세요&quot;)
            },
            style = MaterialTheme.typography.headlineSmall.copy(
                fontWeight = FontWeight.Bold
            ),
            color = Color.White
        )

        Spacer(Modifier.height(32.dp))

        // 색상 선택
        Row(
            horizontalArrangement = Arrangement.spacedBy(12.dp),
            modifier = Modifier.horizontalScroll(colorScrollState)
        ) {
            AccentColor.entries.forEach { accent -&gt;
                val isSelected = accent == selected

                Box(
                    modifier = Modifier
                        .size(44.dp)
                        .clip(CircleShape)
                        .background(accent.color)
                        .then(
                            if (isSelected)
                                Modifier.border(2.dp, Color.White, CircleShape)
                            else Modifier
                        )
                        .clickable { selected = accent }
                )
            }
        }
    }
}</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[[로컬 AI 홈서버 구축기] N100 미니PC에 Ollama 올리기]]></title>
            <link>https://velog.io/@jeongmin-0113/%EB%A1%9C%EC%BB%AC-AI-%ED%99%88%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95%EA%B8%B0-N100-%EB%AF%B8%EB%8B%88PC%EC%97%90-Ollama-%EC%98%AC%EB%A6%AC%EA%B8%B0</link>
            <guid>https://velog.io/@jeongmin-0113/%EB%A1%9C%EC%BB%AC-AI-%ED%99%88%EC%84%9C%EB%B2%84-%EA%B5%AC%EC%B6%95%EA%B8%B0-N100-%EB%AF%B8%EB%8B%88PC%EC%97%90-Ollama-%EC%98%AC%EB%A6%AC%EA%B8%B0</guid>
            <pubDate>Sun, 26 Apr 2026 17:00:16 GMT</pubDate>
            <description><![CDATA[<h2 id="왜-로컬-ai인가">왜 로컬 AI인가?</h2>
<p>일단, API 비용이 0원이다.</p>
<p>AI를 몇 번이나 호출해도 요금이 나오지 않는다는 점이 가장 좋고, 두 번째가 프라이버시다. 사실  AI를 통해 넘어가서 학습되더라도 문제가 되지 않는 정보만 다루고 있긴 하지만 사적인 정보를 기반으로 질문할 때는 걱정이 되는 면도 있었다. 따라서 놀고 있는 서버에 로컬 AI를 돌려보기로 결정했다.</p>
<hr>
<h2 id="활용-방안">활용 방안</h2>
<ol>
<li><p><strong>스마트팜 센서 데이터 분석</strong>
수경재배 포트에 ESP32와 온습도/수온/조도/수위 센서를 연결해서 실시간 데이터를 수집할 예정이다. 이 데이터를 로컬 AI가 분석해서 현재 스마트팜 상태 요약을 주기적으로 작성하는 게 목표다.</p>
</li>
<li><p><strong>아침 브리핑 자동화</strong>
RSS 피드로 뉴스와 받은 이메일 정보를 수집하고, 로컬 AI가 요약해서 매일 아침 브리핑을 만들어주는 자동화를 구성할 계획이다.</p>
</li>
</ol>
<p>이외에도 단순히 대화나 반복 작업, 할인 모니터링 같이 자잘한 기능도 구현해보고 싶다.</p>
<hr>
<h2 id="서버-스펙">서버 스펙</h2>
<p>홈서버로 사용 중인 N100 미니PC 스펙이다.</p>
<table>
<thead>
<tr>
<th>항목</th>
<th>사양</th>
</tr>
</thead>
<tbody><tr>
<td>CPU</td>
<td>Intel N100</td>
</tr>
<tr>
<td>RAM</td>
<td>16GB</td>
</tr>
<tr>
<td>SSD</td>
<td>512GB</td>
</tr>
<tr>
<td>OS</td>
<td>Ubuntu 24</td>
</tr>
</tbody></table>
<p>MLLSE 사의 미니PC로, 알리 익스프레스에서 구매했으며 구매 당시 가격은 212,600원이었다. 이미 Immich(개인 이미지 클라우드), Obsidian 동기화용 MongoDB, 서버 관리를 위한 Portainer, Nginx Proxy Manager, Tailscale이 올라가 있는 상태다. 이 모든 서비스가 돌아가면서 메모리 사용량이 약 1.6GB 정도다.</p>
<p>로컬 AI를 올리기 전에 <code>docker stats</code>로 현황을 먼저 확인했다.</p>
<pre><code class="language-bash">docker stats --no-stream</code></pre>
<p>available 메모리가 13GB 정도 남아있어서 충분했다.</p>
<hr>
<h2 id="모델-선택--qwen35-9b">모델 선택 — Qwen3.5 9B</h2>
<p>로컬 AI 모델 선택이 제일 고민이었다.</p>
<p>선택하기에 앞서 두 가지 개념을 먼저 알아보자면,</p>
<ul>
<li><p><strong>파라미터(B)</strong> : B는 Billion(10억)으로 모델의 파라미터 수를 뜻한다. 파라미터는 AI가 학습하면서 만들어진 수십억 개의 숫자값으로, 쉽게 말하면 모델의 &quot;뇌세포 연결 수&quot;다. 파라미터 숫자가 클수록 더 똑똑하지만 메모리를 더 많이 쓴다.</p>
<ul>
<li><strong>양자화(Quantization)</strong> : 원래 파라미터 하나를 저장하는 데 32비트를 쓰는데, 이걸 4비트로 압축하면 크기가 1/8로 줄어든다. 품질이 약간 떨어지지만 일반적인 용도에서는 거의 차이를 느끼기 어렵다. Ollama에서 모델을 받을 때 일반적으로 4비트 양자화된 버전을 받아오지만, 태그를 통해 양자화 버전을 특정할 수 있다.</li>
</ul>
</li>
</ul>
<pre><code class="language-bash"># 기본 (Q4_K_M 자동 선택)
ollama pull qwen3.5:9b
ollama pull qwen3.5:9b-instruct-q4_k_m

# 더 가볍게 (품질 낮아짐)
ollama pull qwen3.5:9b-instruct-q2_K

# 더 높은 품질 (메모리 더 사용)
ollama pull qwen3.5:9b-instruct-q8_0</code></pre>
<p>이제 나의 미니PC 성능 기준으로 현실적인 선택지를 정리하면 이렇다.</p>
<table>
<thead>
<tr>
<th>모델</th>
<th>용량 (Q4)</th>
<th>한국어</th>
<th>코딩</th>
<th>응답 속도</th>
<th>N100 적합도</th>
</tr>
</thead>
<tbody><tr>
<td>Gemma4 E2B</td>
<td>~3GB(실제 7GB)</td>
<td>보통</td>
<td>보통</td>
<td>빠름</td>
<td>보통</td>
</tr>
<tr>
<td>Gemma4 E4B</td>
<td>~5.5GB(실제 10GB 이상)</td>
<td>보통</td>
<td>좋음</td>
<td>느림</td>
<td>메모리 과사용</td>
</tr>
<tr>
<td>Qwen3.5 9B</td>
<td>~6.6GB(실제 10GB 이상)</td>
<td>좋음</td>
<td>좋음</td>
<td>매우 느림</td>
<td>메모리 과사용</td>
</tr>
</tbody></table>
<p><del>나머지 서비스들도 메모리를 쓰고, 나중에 다른 모델도 추가할 수 있으니 여유를 남겨두는 게 좋다. <strong>Qwen3.5 9B</strong>로 결정했다. 256K 컨텍스트 윈도우를 지원하고 한국어 성능도 괜찮다.</del></p>
<p>하루 정도 지켜보며 n8n으로 자동화도 해봤다가 대화도 해봤다가 여러가지를 시도해보았는데 내 PC 성능상 Qwen3.5 9b 모델은 응답에 10분 이상 소요되어 http 통신에서는 연결이 자동으로 끊어질 정도였으며 Gemma4 E4B는 10분 이내로 응답하지만 메모리를 10GB 이상 차지했다. 내외장 GPU가 없는 환경이라 연산에서 메모리 자원을 훨씬 많이 사용한 듯 싶다.</p>
<p>다른 저성능 모델을 시도해보며 업데이트하겠다.</p>
<hr>
<h2 id="설치--ollama--open-webui">설치 — Ollama + Open WebUI</h2>
<p>Docker Compose로 한 번에 올린다. Portainer를 쓰고 있다면 Stacks에서 바로 붙여넣기 하면 된다.</p>
<pre><code class="language-yaml">version: &#39;3&#39;
services:
  ollama:
    image: ollama/ollama
    container_name: ollama
    ports:
      - &quot;11434:11434&quot;
    volumes:
      - ollama_data:/root/.ollama
    restart: unless-stopped

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    ports:
      - &quot;3000:8080&quot;
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
    volumes:
      - open_webui_data:/app/backend/data
    depends_on:
      - ollama
    restart: unless-stopped

volumes:
  ollama_data:
  open_webui_data:</code></pre>
<p>컨테이너가 올라오면 모델을 pull한다.</p>
<pre><code class="language-bash">docker exec ollama ollama pull qwen3.5:9b</code></pre>
<p>6.6GB라 다운로드에 시간이 좀 걸린다. 완료되면 브라우저에서 접속해보자.</p>
<pre><code>http://서버IP:3000</code></pre><p>처음 접속하면 계정 생성 화면이 나온다. 로컬 전용이라 아무 이메일/비밀번호나 입력해도 된다. 상단에서 qwen3.5:9b를 선택하고 한국어로 말을 걸어보면 된다.</p>
<hr>
<h2 id="실제-써보니">실제 써보니</h2>
<p>확실히 클라우드 AI보다 느리다. 내 서버 컴퓨터는 GPU가 없어서 CPU로만 돌리는데, 초당 3<del>8 토큰 정도 나온다. 자기 소개를 시켜보니 생각에만 3분, 출력에 추가로 시간이 더 걸린다. 실제로는 4</del>5분만에 답변을 받았다.</p>
<p><img src="https://velog.velcdn.com/images/jeongmin-0113/post/246a2c2a-a28d-431d-afd5-26e6f91d7116/image.png" alt=""></p>
<p><del>많이</del> 느리긴 하지만 특정 시간에 주기적으로 진행하는 자동화 작업은 응답이 느린 로컬 AI를 쓰더라도 괜찮을 것 같다. 센서 데이터 분석이나 예약 작업처럼 요청해두고 나중에 확인하는 용도에는 속도가 크게 문제되지 않는다.</p>
<p>스마트폰에서도 접근하고 싶다면 Tailscale이 이미 설치되어 있으면 간단하다. 스마트폰에 Tailscale 앱을 설치하고 같은 계정으로 로그인하면 외부에서도 <code>http://서버IP:3000</code>으로 접속할 수 있다.</p>
<hr>
<h2 id="다음-편에서는">다음 편에서는..</h2>
<p>아침 브리핑 자동화를 먼저 구현해볼 예정이다. RSS 피드, Gmail로 정보 수집하고 n8n으로 워크 플로우를 만들어보겠다. 또 재미있는 활용 방법이 생각나면 추가하겠다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Docker] 스타듀밸리 headless 서버 만들기]]></title>
            <link>https://velog.io/@jeongmin-0113/Docker-%EC%8A%A4%ED%83%80%EB%93%80%EB%B0%B8%EB%A6%AC-headless-%EC%84%9C%EB%B2%84-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
            <guid>https://velog.io/@jeongmin-0113/Docker-%EC%8A%A4%ED%83%80%EB%93%80%EB%B0%B8%EB%A6%AC-headless-%EC%84%9C%EB%B2%84-%EB%A7%8C%EB%93%A4%EA%B8%B0</guid>
            <pubDate>Thu, 19 Mar 2026 14:49:23 GMT</pubDate>
            <description><![CDATA[<p><a href="https://github.com/stardew-valley-dedicated-server/server">주니모 서버</a>를 사용해 개인 우분투 서버에 스타듀밸리 모드 서버를 개설했습니다.</p>
<h2 id="설치-방법">설치 방법</h2>
<p><a href="https://stardew-valley-dedicated-server.github.io/server/admins/quick-start/installation.html">주니모 서버 설치 방법</a>에 따라 설치를 진행했습니다.</p>
<pre><code class="language-bash">mkdir junimoserver &amp;&amp; cd junimoserver
curl -O https://raw.githubusercontent.com/stardew-valley-dedicated-server/server/master/docker-compose.yml
curl -O https://raw.githubusercontent.com/stardew-valley-dedicated-server/server/master/.env.example
mv .env.example .env</code></pre>
<p>.env 파일에는 스팀 아이디, 비밀번호와 서버 관리 웹 비밀번호를 입력해야 합니다.</p>
<pre><code class="language-bash">STEAM_USERNAME=&quot;your_steam_username&quot;
STEAM_PASSWORD=&quot;your_steam_password&quot;
VNC_PASSWORD=&quot;your_secure_password&quot;</code></pre>
<p>이후 스팀 로그인 진행합니다.</p>
<pre><code class="language-bash">docker compose run --rm -it steam-auth setup</code></pre>
<p>실행하면 이런 오류가 발생했습니다.</p>
<pre><code class="language-bash">Image sdvd/steam-service:latest failed to resolve reference &quot;docker.io/sdvd/steam-service:latest&quot;: docker.io/sdvd/steam-service:latest: not found 
Image sdvd/steam-service:latest Building 
[+] Building 0.1s (1/1) FINISHED                                                                                       
 =&gt; [internal] load local bake definitions                                                                        0.0s
 =&gt; =&gt; reading from stdin 581B                                                                                    0.0s
unable to prepare context: path &quot;/home/jmt/docker/junimo-server/tools/steam-service&quot; not found</code></pre>
<p><a href="https://github.com/stardew-valley-dedicated-server/server/issues/211">이슈</a>가 있어 버전을 latest에서 preview로 변경하면 해결된다는 것을 확인했습니다.</p>
<p><img src="https://velog.velcdn.com/images/jeongmin-0113/post/a9b6fd62-e162-47fb-af58-095c247dbd77/image.png" alt=""></p>
<p>이미지를 -latest에서 -preview로 변경 후 다시 스팀 로그인합니다.</p>
<pre><code class="language-bash">docker compose run --rm -it steam-auth setup</code></pre>
<p><img src="https://velog.velcdn.com/images/jeongmin-0113/post/cba9e007-a569-4366-b965-813efd2b78f9/image.png" alt=""></p>
<p>로그인 진행 후 바로 게임 파일 다운로드까지 진행됩니다</p>
<p><img src="https://velog.velcdn.com/images/jeongmin-0113/post/88f877f5-fa57-4bee-b95f-ecca7afc28e2/image.png" alt=""></p>
<p>게임 파일 설치가 됐습니다. 이제 도커로 서버를 열겠습니다.</p>
<pre><code class="language-bash">docker compose up -d</code></pre>
<p><img src="https://velog.velcdn.com/images/jeongmin-0113/post/e6dc5187-d840-4294-bdc1-8b771b970e20/image.png" alt=""></p>
<p>잘 열린 것을 확인할 수 있습니다.</p>
<pre><code class="language-bash">docker compose exec server attach-cli</code></pre>
<p>다음으로 서버 농장의 초대코드를 받습니다.</p>
<p><img src="https://velog.velcdn.com/images/jeongmin-0113/post/3158a8a2-7d31-4ccf-916c-1a52eb57b8af/image.png" alt=""></p>
<p>빨간색 위치에 적힌 코드가 바로 초대코드입니다. 해당 화면에서 서버에 커맨드라인으로 명령어를 입력할 수 있습니다.</p>
<p><img src="https://velog.velcdn.com/images/jeongmin-0113/post/37c253bf-0497-4d27-8ab2-bac5f9bb060b/image.png" alt=""></p>
<p>잘 들어가지는 것을 확인할 수 있습니다.</p>
<h2 id="-모바일안드로이드-접속-시도-실패">+) 모바일(안드로이드) 접속 시도 (실패)</h2>
<p>외부 접근까지 생각해서 tailscale로 연결된 휴대전화에서 접속을 시도했습니다. 
<a href="https://cafe.naver.com/starvall/469045">vpn으로 접속 성공한 기록</a>, <a href="https://www.youtube.com/watch?v=Vc_S3rSbZDE">pc와 모바일 통신 성공한 기록</a>을 참고했습니다.</p>
<h3 id="환경">환경:</h3>
<ul>
<li>서버 pc와 스마트폰은 tailscale에 연결되어있음.</li>
<li>스마트폰의 스타듀밸리 버전 1.6.15.1, PC 스타듀밸리도 1.6.15 버전</li>
<li>같은 와이파이 사용중 (이건 tailscale로 연결되어 있다면 사실상 필요 없음)</li>
</ul>
<h3 id="트러블슈팅">트러블슈팅</h3>
<ol>
<li>같은 와이파이에 연결되어 있으므로 서버의 ip로 통신을 시도: 실패</li>
<li>tailscale의 서버 pc ip로 통신을 시도: 실패</li>
<li>exit node를 서버 pc로 설정 후 서버 pc ip로 통신을 시도: 실패</li>
<li>tailscale 서버 pc ip + 포트 (24642) 명시: 실패</li>
</ol>
<p>일단 시도했던 것은 전부 실패했습니다. 마이너 버전이 달라서 통신이 안될 가능성 있습니다.
계속 사용해보며 성공하면 업데이트 예정입니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[클라우드 IDE + 안드로이드 스튜디오 = !!]]></title>
            <link>https://velog.io/@jeongmin-0113/%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-IDE-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%8A%A4%ED%8A%9C%EB%94%94%EC%98%A4</link>
            <guid>https://velog.io/@jeongmin-0113/%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-IDE-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%8A%A4%ED%8A%9C%EB%94%94%EC%98%A4</guid>
            <pubDate>Sun, 09 Feb 2025 12:09:45 GMT</pubDate>
            <description><![CDATA[<p><a href="https://docs.google.com/forms/d/e/1FAIpQLSc8K3qByXhDR2XDFrEcKSdaBjMoSzVIg23JFO0S4FxfUR-3sA/viewform?pli=1"><img src="https://velog.velcdn.com/images/jeongmin-0113/post/acd34f83-893d-4095-be88-e96292808002/image.png" alt="">
</a>
업데이트하러 갔더니 웹 브라우저용 안드로이드 스튜디오라는 희소식이! 너무 좋아서 무슨 일인지 한 번 알아보았습니다.</p>
<h3 id="프로젝트-idx">프로젝트 IDX</h3>
<p>작년에 구글에서 웹에서 실행 가능한 클라우드 IDE 프로젝트 <a href="https://idx.google.com/">IDX</a>를 공개했었다고 합니다! 저도 이번에 처음 알았는데 gemini 코드 추천 기능, 공동 작업이 가능하며 현재는 아래의 사진을 포함해 React Native, java, c++ 등 다양한 템플릿을 지원한다고 합니다.
<img src="https://velog.velcdn.com/images/jeongmin-0113/post/e2f3f1ed-5259-4d91-aacc-94b79784bfc3/image.png" alt=""></p>
<h3 id="웹-버전-안드로이드-스튜디오-지금-당장-사용-가능한가요-아니오">웹 버전 안드로이드 스튜디오, 지금 당장 사용 가능한가요? 아니오!</h3>
<p>안드로이드 스튜디오 웹 버전은 <strong>아직 출시되지는 않았지만</strong>, 현재 <a href="https://docs.google.com/forms/d/e/1FAIpQLSc8K3qByXhDR2XDFrEcKSdaBjMoSzVIg23JFO0S4FxfUR-3sA/viewform?pli=1">waitlist</a>를 받고 있습니다. 폼 질문들을 보면 기업 상대로 한 베타 테스트 같긴 하지만 얼른 써보고 싶어서 일단 신청해봤습니다.</p>
]]></description>
        </item>
    </channel>
</rss>