ADK, Gemini & Javelit = ๐Ÿ˜

๋ฐœํ–‰: (2025๋…„ 12์›” 15์ผ ์˜คํ›„ 05:37 GMT+9)
7 min read
์›๋ฌธ: Dev.to

Source: Dev.to

์ปจํ…์ŠคํŠธ

์šฐ๋ฆฌ ํŒŸ์บ์ŠคํŠธ Zenikast ์—ํ”ผ์†Œ๋“œ๊ฐ€ ์—ฐ์†ํ•ด์„œ ๊ณต๊ฐœ๋˜๋Š” ๋™์•ˆ, ๊ฐ ์—ํ”ผ์†Œ๋“œ์˜ ์ „์‚ฌ๋ณธ์„ ๋งŒ๋“œ๋Š” ์ž‘์—…์€ ์—ฌ์ „ํžˆ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค(์ด์ „ ๊ธ€ ์ฐธ๊ณ ).
Vertex AI ๋กœ ์ฒซ ๋ฒˆ์งธ ์„ฑ๊ณต์ ์ธ ์‹œ๋„๋ฅผ ํ•œ ๋’ค, ์šฐ๋ฆฌ๋Š” ์ „์‚ฌ๋ณธ์„ Zenika ์ „ ์ง์›์ด Vertex AI๋‚˜ Google Cloud Platform์— ๋Œ€ํ•œ ์ง€์‹ ์—†์ด๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ทธ๋ž˜ํ”ฝ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ œ๊ณตํ•˜๊ณ ์ž ํ–ˆ์Šต๋‹ˆ๋‹ค.

Gemini์™€ ADK ํ†ตํ•ฉ

์–ธ์–ด ์„ ํƒ

ํ•™์ฐฝ ์‹œ์ ˆ๋ถ€ํ„ฐ Java ๊ฐœ๋ฐœ์ž์˜€๊ธฐ์—, ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ด ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋„ Java๋กœ ๋งŒ๋“ค๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ €์ˆ˜์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

Gemini๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด Google์˜ java-genai ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ API ํ˜ธ์ถœ ์š”๊ตฌ๋ฅผ ์ถฉ์กฑํ•ฉ๋‹ˆ๋‹ค.

Agent Development Kit (ADK)

์šฐ๋ฆฌ๋Š” ์ตœ์ข…์ ์œผ๋กœ Agent Development Kit (ADK) ๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” Google์ด ์ œ๊ณตํ•˜๋Š” ์—์ด์ „ํŠธ ์ œ์ž‘์„ ๋•๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ด๋ฉฐ, ์ฒ˜์Œ์—” Python ์ „์šฉ์ด์—ˆ์ง€๋งŒ ํ˜„์žฌ๋Š” Java(๋ฐ Go) ๋ฒ„์ „๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Maven ์˜์กด์„ฑ

<!-- ADK core -->
<dependency>
    <groupId>com.google.adk</groupId>
    <artifactId>google-adk</artifactId>
    โ€ฆ
</dependency>

<!-- ADK development utilities (runtime) -->
<dependency>
    <groupId>com.google.adk</groupId>
    <artifactId>google-adk-dev</artifactId>
    โ€ฆ
    <scope>runtime</scope>
</dependency>

์ฃผ์š” ํด๋ž˜์Šค

ํด๋ž˜์Šค์—ญํ• 
BaseAgent๋ชจ๋“  ์—์ด์ „ํŠธ์˜ ๊ธฐ๋ณธ ํด๋ž˜์Šค.
LlmAgent์—์ด์ „ํŠธ ๋นŒ๋”โ€ฏ: ์ด๋ฆ„, ์„ค๋ช…, ๋ชจ๋ธ(Gemini ๋“ฑ) ๋ฐ ์ง€์‹œ๋ฌธ ์„ค์ •.
InMemoryRunner์—์ด์ „ํŠธ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ.

์—์ด์ „ํŠธ ์ƒ์„ฑ ์˜ˆ์‹œ

LlmAgent agent = LlmAgent.builder()
    .name("Transcriber")
    .description("Transcrit les podcasts avec Gemini")
    .model("gemini-1.5-pro")   // le modรจle est configurable
    .instruction("Transcris le texte de faรงon lisible.")
    .build();

InMemoryRunner runner = new InMemoryRunner(agent);
Session session = runner.startSession();

์‹คํ–‰ ๋ฐ ๊ฒฐ๊ณผ ๊ฐ€์ ธ์˜ค๊ธฐ

runner.run(session, "Voici le texte ร  transcrire.");
List events = session.getEvents();   // les rรฉponses sont dans les events
String transcription = events.stream()
    .filter(e -> e instanceof TextResponseEvent)
    .map(e -> ((TextResponseEvent) e).getText())
    .findFirst()
    .orElse("Aucune rรฉponse");
System.out.println(transcription);

์‘๋‹ต์ด ๋„์ฐฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๊ณ , ์—์ด์ „ํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค ๐ŸŽ‰.

ADK์™€ ํ•จ๊ป˜ํ•˜๋Š” ๊ทธ๋ž˜ํ”ฝ ์ธํ„ฐํŽ˜์ด์Šค

google-adk-dev ์˜์กด์„ฑ์€ ์—์ด์ „ํŠธ๋ฅผ ํ…Œ์ŠคํŠธยท์‚ฌ์šฉยท๋””๋ฒ„๊น…ํ•  ์ˆ˜ ์žˆ๋Š” ์›น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
์ฃผ์˜โ€ฏ: ์ด ์˜์กด์„ฑ์€ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์›น ์„œ๋ฒ„ ์‹คํ–‰

mvn exec:java -Dexec.mainClass=com.google.adk.dev.AdkWebServer

์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค:

  • ์ขŒ์ธก ๋ฉ”๋‰ด โ€“ ์ด๋ฒคํŠธ, ๋กœ๊ทธ, ์„ธ์…˜ ์ƒํƒœ ๋ฐ ์—์ด์ „ํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋„๊ตฌ ํ‘œ์‹œ.
  • ์ค‘์•™ ์˜์—ญ โ€“ ์—์ด์ „ํŠธ์™€ ๋Œ€ํ™”ํ•˜๋Š” ๋Œ€ํ™”์ฐฝ.

์•„๋ž˜ ์˜ˆ์‹œ์—์„œ๋Š” ์˜ค๋””์˜ค ํด๋ฆฝ์„ ์—์ด์ „ํŠธ์— ์ „๋‹ฌํ•ด ์ „์‚ฌ ํ’ˆ์งˆ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

ADK ์ „์ฒด ๋ฌธ์„œ :

Geminiโ€ฏ3์™€ ๊ทธ ์„ฑ๋Šฅ

Geminiโ€ฏ3 ์ถœ์‹œ๊ฐ€ ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ(ํ…์ŠคํŠธยท์ด๋ฏธ์ง€ยท๋น„๋””์˜ค) ์ง„๋ณด๋กœ ํฐ ์ฃผ๋ชฉ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.
์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋ธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • gemini-3-pro โ€“ ์ตœ์ƒ์œ„ ํ…์ŠคํŠธ ๋ชจ๋ธ.
  • nano-banana โ€“ ๊ฐ€๋ฒผ์šด ์ด๋ฏธ์ง€ ๋ชจ๋ธ.
  • veo-3 โ€“ ๋น„๋””์˜ค ๋ชจ๋ธ.

์šฐ๋ฆฌ์˜ ์ „์‚ฌ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ, ํ’ˆ์งˆ์ด Vertexโ€ฏAI๋ณด๋‹ค ํ˜„์ €ํžˆ ๋›ฐ์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค.

Javelit โ€“ Java ๊ทธ๋ž˜ํ”ฝ ์ธํ„ฐํŽ˜์ด์Šค ๋งŒ๋“ค๊ธฐ

Javelit(Streamlit ์˜๊ฐ)๋Š” API ์–ธ์–ด๋ฅผ ๋– ๋‚˜์ง€ ์•Š๊ณ ๋„ Java๋กœ ๋น ๋ฅด๊ฒŒ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

Maven ์˜์กด์„ฑ

<dependency>
    <groupId>io.javelit</groupId>
    <artifactId>javelit-core</artifactId>
    โ€ฆ
</dependency>

์ฃผ์š” ์ปดํฌ๋„ŒํŠธ

์ปดํฌ๋„ŒํŠธ์„ค๋ช…
Jt.titleํŽ˜์ด์ง€ ์ œ๋ชฉ
Jt.text์ผ๋ฐ˜ ํ…์ŠคํŠธ
Jt.code๊ตฌ๋ฌธ ๊ฐ•์กฐ๊ฐ€ ์ ์šฉ๋œ ์ฝ”๋“œ ๋ธ”๋ก
Jt.htmlHTML ํ‘œ์‹œ(์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์—†์ด)
Jt.echartsECharts ๊ธฐ๋ฐ˜ ์ฐจํŠธ
Jt.button, Jt.radio, Jt.textInputํผ ์š”์†Œ

Javelit ์ „์ฒด ๋ฌธ์„œ :

Google Cloud Run์— ๋ฐฐํฌ

โ€˜๋‹จ์ผ ์ปดํฌ๋„ŒํŠธโ€™ ์•„ํ‚คํ…์ฒ˜ ๋•๋ถ„์— ๋ฐฐํฌ๊ฐ€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค: ADK ์—์ด์ „ํŠธ์™€ Javelit ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•œ ํ•˜๋‚˜์˜ Docker ์ด๋ฏธ์ง€๋งŒ ๋งŒ๋“ค๋ฉด ๋ฉ๋‹ˆ๋‹ค.
Cloud Run์—์„œ๋Š” ์ด๋ฏธ์ง€๋ฅผ ํ‘ธ์‹œํ•˜๊ณ  ๋ช‡ ๋ถ„ ์•ˆ์— ์„œ๋น„์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กฌํ”„ํŠธ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ์˜ต์…˜

๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค:

  • ํƒ€์ž„์Šคํƒฌํ”„ ํ‘œ์‹œ ์—ฌ๋ถ€(Thรฉophile์—๊ฒŒ ๊ฐ์‚ฌ).
  • ์—„๊ฒฉํ•œ ์ „์‚ฌ(์›๋ฌธ ๊ทธ๋Œ€๋กœ) ํ˜น์€ ๊ฐ€๋…์„ฑ์„ ๋†’์ธ ๋ฒ„์ „ ์„ ํƒ.

์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ

์ „์ฒด ์ฝ”๋“œ๋Š” GitHub์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

Agentโ€‘Zโ€‘transcribeโ€‘podcast

๊ฒฐ๋ก 

ADKโ€ฏ+โ€ฏGeminiโ€ฏ+โ€ฏJavelit ์กฐํ•ฉ์€ ํŒŸ์บ์ŠคํŠธ ์ „์‚ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

  • ADKโ€ฏโ€“ LLM ์—์ด์ „ํŠธ ์ œ์ž‘์„ ๋‹จ์ˆœํ™”.
  • Geminiโ€ฏ3โ€ฏโ€“ ๊ณ ํ’ˆ์งˆ ์ „์‚ฌ ์ œ๊ณต.
  • Javelitโ€ฏโ€“ ๋ณต์žกํ•œ CSS ์—†์ด Java๋กœ ๊ทธ๋ž˜ํ”ฝ UI ๊ตฌ์ถ•.

์„œ๋ฒ„๋ฆฌ์Šค(Cloud Run) ๋ชจ๋“œ๋กœ ๋ฐฐํฌ๋œ ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ฏธ์ ์ด๋ฉด์„œ๋„ ๊ธฐ๋Šฅ์ ์ž…๋‹ˆ๋‹ค.
์ด ํ™˜๊ฒฝ์„ IDE โ€˜์—์ด์ „ํŠธํ˜•โ€™ Antigravity์™€ ๊ฒฐํ•ฉํ•˜๋ฉด, ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ํ›จ์”ฌ ๋” ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿš€.

Back to Blog

๊ด€๋ จ ๊ธ€

๋” ๋ณด๊ธฐ ยป

์šฐ๋ฆฌ ์‚ฌ์ดํŠธ๊ฐ€ ์‹ฑ๊ฐ€ํฌ๋ฅด์—์„œ๋Š” ๋А๋ฆฌ๊ณ  ์œ ๋Ÿฝ์—์„œ๋Š” ์™„๋ฒฝํ–ˆ๋Š”๋ฐ, ๊ทธ ์ด์œ ๋Š”.

๋ฌธ์ œ: ์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์ œ๋Œ€๋กœ ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ API๋Š” Cloudflare ๋’ค์— ์œ„์น˜ํ•˜๊ณ  ์—ฃ์ง€ ์บ์‹ฑ์„ ์‚ฌ์šฉํ–ˆ์œผ๋ฉฐ, ๋Œ€์‹œ๋ณด๋“œ์—์„œ๋Š” p95 ์‘๋‹ต ์‹œ๊ฐ„์ด 100 ms ๋ฏธ๋งŒ์ž„์„ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. Af...

๋‚˜๋Š” Game Boy๋ฅผ ChatGPT ์•ˆ์— ๋„ฃ์—ˆ๋‹ค (ChatGPT Apps)

์†Œ๊ฐœ: ChatGPT ์•ฑ์€ ์•„์ง BETA ๋‹จ๊ณ„์ด์ง€๋งŒ, ์–ด์ œ๋ถ€ํ„ฐ ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž์‹ ์˜ ์•ฑ์„ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ œ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” Game Boy ์•ˆ์— ๋งž์ถ”์–ด ๋ณด๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

spaceorbust โ€“ GitHub ์ปค๋ฐ‹์œผ๋กœ ์šฐ์ฃผ ๋ฌธ๋ช…์„ ์›€์ง์ด๋Š” ํ„ฐ๋ฏธ๋„ RPG

๊ฐœ์š”: ์‹ค์ œ GitHub ํ™œ๋™์ด ์ธ๋ฅ˜์˜ ์šฐ์ฃผ ์ง„์ถœ์„ ์ด‰์ง„ํ•˜๋Š” ํ„ฐ๋ฏธ๋„ RPG. - ์ปค๋ฐ‹์€ ์—๋„ˆ์ง€๋กœ ๋ณ€ํ™˜๋œ๋‹ค - ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋Š” ์žฌ๋ฃŒ๊ฐ€ ๋œ๋‹ค - ์ด์Šˆโ€ฆ