2 3월 2026

[인공지능 기술]  Andrej Karpathy: 에이전트 AI 코딩이 세상을 바꿔놓았다

[인공지능 기술]  Andrej Karpathy: 에이전트 AI 코딩이 세상을 바꿔놓았다

41P by xguru 4일전 | ★ favorite | 댓글 5개

“코드를 직접 타이핑 하던 시대”는 끝났다

  • 지난 2개월간 프로그래밍이 점진적 발전이 아닌 급격한 변화를 겪었으며, 특히 직전 12월이 결정적 전환점이었음
  • 모델들의 품질, 장기 일관성(long-term coherence), 끈기(tenacity) 가 크게 향상되어 크고 긴 작업을 끝까지 처리 가능
  • 이로 인해 기존 기본 프로그래밍 워크플로우에 매우 파괴적인 변화가 발생
  • 일례로, 주말에 자택 카메라용 로컬 비디오 분석 대시보드를 구축했음
  • 에이전트에게 내린 지시 내용

    “DGX Spark의 로컬 IP와 사용자명/비밀번호를 줄 테니 로그인하고, SSH 키 설정, vLLM 설정, Qwen3-VL 다운로드 및 벤치마크, 비디오 추론용 서버 엔드포인트 구축, 기본 웹 UI 대시보드 구축, 전체 테스트, systemd 서비스 설정, 메모리 노트 기록, 마크다운 리포트 작성까지 할 것”

  • 에이전트가 약 30분간 자율적으로 작업 수행: 여러 문제에 부딪히면서 온라인으로 해결책을 조사하고, 하나씩 해결하며 코드 작성, 테스트, 디버깅, 서비스 설정까지 완료 후 보고서를 제출함
  • 직접 손댄 것은 아무것도 없었으며, 불과 3개월 전만 해도 주말 전체가 필요한 프로젝트였지만 이제는 30분 동안 잊고 기다리면 완료되는 작업이 되었음
  • 컴퓨터 발명 이래 에디터에 코드를 직접 타이핑하던 시대는 끝났음
  • 이제는 AI 에이전트를 실행하고, 영어로 작업을 지시한 뒤 그 작업을 병렬로 관리하고 검토하는 시대
  • 가장 큰 보상은 추상화 계층을 계속 높여가는 것, 즉 올바른 도구, 메모리, 지시를 갖춘 장기 실행 오케스트레이터가 여러 병렬 Code 인스턴스를 생산적으로 관리하도록 설계하는 것
  • 최상위 수준의 “에이전틱 엔지니어링” 을 통해 달성할 수 있는 레버리지가 현재 매우 높음
  • 물론, 아직 완벽하지 않으며, 고수준 방향 설정, 판단력, 감각(taste), 감독, 반복 작업, 힌트와 아이디어 제공이 필요함
  • 일부 시나리오에서 훨씬 잘 작동하며, 특히 작업 명세가 명확하고 기능을 검증/테스트할 수 있는 경우에 효과적임
  • 핵심은 작업을 적절히 분해하여 잘 작동하는 부분은 에이전트에 위임하고 나머지 부분에서 도움을 주는 직관을 기르는 것
  • 현재 소프트웨어 업계는 “평소와 다름없는 시기(business as usual)”가 전혀 아닌 상황

[출처] https://news.hada.io/topic?id=27017

Loading

16 2월 2026

[인공지능 개발자]  Claude Code 완전 가이드: 해커톤 우승자의 70가지 파워 팁 [54p PDF] 

[인공지능 개발자]  Claude Code 완전 가이드: 해커톤 우승자의 70가지 파워 팁 [54p PDF] 

Claude_Code_완전_가이드_70가지_팁.pdf

135P by xguru 7일전 | ★ favorite | 댓글 3개

Part 1: 에이전틱 개발자의 사고방식

  • 1.1. 큰 문제 정복의 첫걸음: 분해하고 정복하라 (ykdojo #3)
  • 1.2. 계획 모드 vs. 욜로 모드 (Ado #18, #19)
  • 1.3. 컨텍스트: AI의 기억력을 지배하는 기술 (ykdojo #5, #8, Ado #15)
  • 1.4. 올바른 추상화 수준 선택 (ykdojo #32)
  • 1.5. 미지의 영역에서 더 용감하게 (ykdojo #35)

Part 2: 기초부터 탄탄하게 – 환경 설정과 필수 명령어

  • 2.1. 커스텀 상태 라인으로 모든 것을 한눈에 (ykdojo #0)
  • 2.2. 필수 슬래시 명령어 마스터 (ykdojo #1, Ado #4, #16, #17)
  • 2.3. CLAUDE.md: AI를 위한 프로젝트 설명서 (Ado #1, #2, ykdojo #30)
  • 2.4. 터미널 별칭으로 빠른 접근 (ykdojo #7)
  • 2.5. 세션 관리: 대화를 잃지 않는 법 (Ado #9, #10, #11, #12)

Part 3: 생산성을 극대화하는 핵심 기술

  • 3.1. 음성으로 코딩하기 (ykdojo #2)
  • 3.2. 터미널 출력 추출의 기술 (ykdojo #6)
  • 3.3. Cmd+A/Ctrl+A: 전체 선택의 힘 (ykdojo #10)
  • 3.4. 마크다운과 Notion 활용 (ykdojo #19, #20)
  • 3.5. 키보드 단축키 완전 정복 (Ado #5, #6, #7, #8, ykdojo #38)
  • 3.6. Vim 모드로 프롬프트 편집 (Ado #13)
  • 3.7. 입력 박스 탐색 및 편집 (ykdojo #38)

Part 4: 컨텍스트 관리의 예술

  • 4.1. 선제적 컨텍스트 압축 (ykdojo #8)
  • 4.2. 터미널 탭으로 멀티태스킹 (ykdojo #14)
  • 4.3. 대화 복제 및 반복제 (ykdojo #23)
  • 4.4. /context로 X-Ray 비전 (Ado #15)
  • 4.5. realpath로 절대 경로 얻기 (ykdojo #24)

Part 5: Git과 GitHub 워크플로우 완전 정복

  • 5.1. Git과 GitHub CLI 프로 활용 (ykdojo #4)
  • 5.2. Git worktrees로 병렬 브랜치 작업 (ykdojo #16)
  • 5.3. 대화형 PR 리뷰 (ykdojo #26)
  • 5.4. 승인된 명령어 감사 (ykdojo #33)

Part 6: 고급 기능 – MCP, Hooks, Agents

  • 6.1. MCP: 외부 세계와의 연결 (Ado #22, #23, #24, #25)
  • 6.2. Hooks: 규칙의 강제 (Ado #26)
  • 6.3. Skills: 재사용 가능한 지식 (Ado #27)
  • 6.4. Agents: 전문화된 서브에이전트 (Ado #28)
  • 6.5. Plugins: 기능 번들 (Ado #29)
  • 6.6. CLAUDE.md vs Skills vs Slash Commands vs Plugins (ykdojo #25)

Part 7: 시스템 최적화와 자동화

  • 7.1. 시스템 프롬프트 슬림화 (ykdojo #15)
  • 7.2. 장시간 작업을 위한 수동 지수 백오프 (ykdojo #17)
  • 7.3. 백그라운드에서 bash 명령 및 에이전트 실행 (ykdojo #36)
  • 7.4. 자동화의 자동화 (ykdojo #41)
  • 7.5. Headless 모드로 CI/CD 통합 (Ado #30)

Part 8: 컨테이너와 샌드박스

  • 8.1. 컨테이너로 위험한 작업 격리 (ykdojo #21)
  • 8.2. Sandbox 모드와 권한 관리 (Ado #20)
  • 8.3. YOLO 모드: 위험을 감수할 때 (Ado #20)

Part 9: 브라우저 통합과 웹 자동화

  • 9.1. 네이티브 브라우저 통합 (Ado #21)
  • 9.2. Playwright MCP (Ado #22)
  • 9.3. Gemini CLI를 대체 수단으로 (ykdojo #11)

Part 10: 실전 활용 사례

  • 10.1. 작성-테스트 사이클 완성 (ykdojo #9)
  • 10.2. 자신만의 워크플로우에 투자 (ykdojo #12)
  • 10.3. 대화 기록 검색 (ykdojo #13)
  • 10.4. 글쓰기 도우미로 활용 (ykdojo #18)
  • 10.5. 연구 도구로 활용 (ykdojo #27)
  • 10.6. 출력 검증 방법 마스터 (ykdojo #28)
  • 10.7. DevOps 엔지니어로 활용 (ykdojo #29)
  • 10.8. 범용 인터페이스로 활용 (ykdojo #31)
  • 10.9. 테스트 많이 작성 (TDD) (ykdojo #34)
  • 10.10. 복잡한 코드 단순화 (ykdojo #40)

Part 11: 고급 패턴과 철학

  • 11.1. 계획과 빠른 프로토타이핑의 균형 (ykdojo #39)
  • 11.2. 개인화된 소프트웨어 시대 (ykdojo #37)
  • 11.3. 사용이 최고의 학습 (ykdojo #22)
  • 11.4. 지식 공유 및 기여 (ykdojo #42)
  • 11.5. 계속 학습하기 (ykdojo #43)

Part 12: 고급 기능과 SDK

  • 12.1. Extended Thinking (Ado #19)
  • 12.2. LSP 통합 (Ado #31)
  • 12.3. Claude Agent SDK (Ado #31)
  • 12.4. 팀 설정과 공유 워크플로우 (Ado #30)

Part 13: 학습 로드맵과 다음 단계

  • 13.1. 초급자를 위한 로드맵 (1-3개월)
  • 13.2. 중급자를 위한 로드맵 (3-12개월)
  • 13.3. 고급자를 위한 로드맵 (1년 이상)
  • 13.4. 필독 참고 자료

[출처] https://news.hada.io/topic?id=26526&utm_source=weekly&utm_medium=email&utm_campaign=202607

Loading

28 12월 2025

[정보기술] [알아봅시다] 2025년 AI를 대표하는 8개의 키워드는

[정보기술] [알아봅시다] 2025년 AI를 대표하는 8개의 키워드는

2025년 AI를 대표하는 8개의 키워드는

  •  AI타임스
  •  승인 2025.12.27 22:20
1. 205131_206643_5824.png

콜린스와 메리엄 웹스터 등 해외의 유명 사전들은 올해의 단어로 각각 ‘바이브 코딩(wibe coding)’과 ‘슬롭(Slop)’을 선정했다. AI가 이제는 전문 영역을 넘어 일상에 파고들었다는 증거로 볼 수 있다.

AI타임스도 올 한해를 정리하며 대표적인 AI 키워드를 뽑아봤다. 이를 통해 올해 기술 트렌드를 되돌아본다. 그리고 이는 2026년에도 주요한 어젠다가 될 가능성이 크다.

1. 에이전트(Agentic)

AI가 단순한 챗봇을 넘어 인간을 대신해 업무를 자동화해 줄 것이라는 기대감이 반영된 단어다. 올해 초에는 샘 알트먼 오픈AI CEO도 연말쯤 에이전트가 기업에 본격 투입될 것으로 봤다. 그리고 월 2만달러의 사용료를 부과할 것이라는 말까지 나왔다.

그런 에이전트는 아직 등장하지 않았다. 현재는 상담사를 대신하는 정도로, 대부분은 테스트 단계로 볼 수 있다. 그리고 이 용어는 이제 AI 자체를 뜻하거나 마케팅용으로 활용되고 있다.

더 중요한 것은 에이전트 역할을 수행하기 위해서는 모델 성능의 향상은 물론, 기존 워크플로우의 적용과 기업 문화와의 충돌, 거버넌스 등의 문제를 해결해야 한다는 점이 드러났다는 것이다. 기술의 완성도보다 비즈니스 통합 난이도가 AI 확산의 병목이 된다는 교훈을 얻은 해였다.

내년에도 에이전트는 업계의 화두가 될 것으로 보인다. 또 이는 모델이 성능 자체만큼이나 애플리케이션으로서의 유용성이 점점 중요해질 것을 예고한다.

2. 바이브 코딩

AI가 현실 문제 해결에 가장 큰 도움을 준 사례로 꼽을 수 있는 것이 바로 AI 코딩이다. 즉, 바이브 코딩이 인기를 끈 것은 AI의 가장 성공적인 사례로 꼽혔다는 것으로 볼 수 있다.

연초부터 빅테크의 수장들이 자체 업무에 이를 적극 도입했다고 밝혔고, 이 영향으로 마이크로소프트가 코더 수천명을 해고하는 일까지 일어났다.

AI는 글쓰기처럼 추상적인 분야보다는, 정확한 답이 있고 이를 자체적으로 검증할 수 있는 수학이나 코딩 등에 강할 수밖에 없다. 이에 따라 AI 코딩의 성능은 앞으로도 크게 발전할 가능성이 크다. 그리고 이는 성공적인 에이전트 사례로 확장될 가능성이 크다.

3. 데이터센터

지난해까지 주요 AI 업체가 ‘모델’ 중심으로 움직였다면, 올해는 ‘인프라’에 집중했다. 1월부터 오픈AI는 ‘스타게이트’라는 초대형 프로젝트로 포문을 열었으며, 1년 내내 관련 발표를 내놓았다. 빅테크들도 일제히 투자 확대를 선언했다.

이는 첨단 모델 개발을 위한 컴퓨팅 확보라는 측면과 동시에 폭발적인 사용자 확대에 따른 추론(inference) 능력, 즉 서비스 확대라는 측면이 반영돼 있다. 

이와 맞물려 에너지 문제도 크게 주목받았다. 동시에 엔비디아는 세계에서 가장 가치가 높은 기업으로 올라섰다. 미국과 중국과의 기술 갈등의 핵심도 데이터센터를 이루는 칩이었다. 

또 이는 ‘AI 버블’ 논란의 핵심이 됐다. 이제는 우주 데이터센터까지 거론되고 있다.

이제 인프라 구축은 일부 빅테크의 문제를 넘어, 소버린 AI라는 추세를 타고 전 세계로 확대되고 있다. 국내도 알트먼 CEO와 젠슨 황 CEO가 잇달아 방문, 데이터 센터와 GPU 공급을 약속했다.

2. 205131_206645_33.png
(사진=메타)

4. 초지능(Superintelligence)

인공일반지능(AGI)에 대한 논의는 올해에도 활발했다. 이미 일부 분야에서는 AI가 인간의 능력을 넘어섰다는 분위기가 형성됐으며, 오픈AI 등은 이를 넘어 ‘초지능’을 새로운 목표로 내세웠다.

특히, LLM으로는 AGI에 도달하기 어렵다는 점이 자주 지적됐다. 이 때문에 월드 모델이 보완책으로 제시됐다. 얀 르쿤 메타 전 수석 과학자까지 합류, 내년에는 이 분야에서도 빠른 발전이 기대된다.

초지능과 관련해 가장 눈길을 끌었던 것은 메타가 MSL을 설립한 것이다. 이름부터 ‘메타 초지능 연구실(meta superintelligence lab)’로, 이를 조직하기 위해 막대한 자금을 퍼부으며 인재 경쟁에 불을 댕겼다. 이 때문에 일부 AI 연구원들은 프로 스포츠 스타에 맞먹는 몸값을 기록했다.

5. 추론(reasoning)과 강화 학습(RL)

추론은 지난해 출시된 오픈AI의 ‘o1’으로 새로운 AI 성능 향상의 기준이 됐다. 이는 AI 모델의 학습을 위한 데이터 고갈과 스케일링 법칙의 한계를 넘는 돌파구로 여겨졌다. 

모델 학습 측면에서는 RL이 새로운 대세가 됐다. 이는 에이전틱 AI를 위해서도 핵심 메커니즘으로 꼽힌다.

AI 전문 기술 용어로 유행이 된 것으로는 ‘증류(Distillation)’와 ‘전문가 혼합(MoE)’ 등을 꼽을 수 있다. 이는 올해 초 세계적인 충격을 안겼던 딥시크의 핵심 기술이라는 점 때문에 부각됐다.

이는 또 오픈 소스가 주류로 올라서는 기반을 마련했다. 특히 중국의 모델은 이제 미국을 따라잡았다는 평가를 받을 정도로 성장했다. 

6. 피지컬 AI (Physical AI)

AI의 최종 애플리케이션으로 꼽히는 휴머노이드 로봇은 올해부터 본격적인 과대광고가 시작됐다. 일론 머스크 CEO는 테슬라를 로봇 회사로 광고했고, 정부의 드라이브로 중국에서는 로봇 체육대회와 화려한 데모 영상이 쏟아졌다. 엔비디아도 이런 흐름에 기름을 부었다.

물론, 휴머노이드는 두뇌 역할을 하는 AI의 완성은 물론, 엔지니어링 문제 해결과 비용 효율 등이 모두 해결돼야 한다. 단기간의 확장은 무리라는 평이다. 

하지만 이는 산업 현장에 AI와 디지털 트윈, 엔지니어링의 결합을 통한 자동화, 즉 피지컬 AI를 화두로 끌어 올렸다. 광범위하게는 자율주행도 여기에 포함된다.

피지컬 AI는 앞서 언급한 AI의 추론과 멀티모달 모델, 월드 모델, 에이전틱 AI 등과 연결된다. 특히 올해는 텍스트를 넘어 이미지, 비디오, 음성 등 모든 데이터를 이해하고 생성하는 멀티모달 모델이 보편화된 해로 볼 수 있다. 

이는 앞으로도 몇년간 중요하게 다뤄질 것으로 예상된다. 이는 AI를 실물 경제와 통합하는 핵심이기 때문이다. 

7.  AI 정신병과 아첨

올해는 AI의 정확도 말고도 사용자에게 미치는 ‘영향’이 강조됐다. AI 챗봇 사용자의 폭발적인 증가에 따라 이제까지 숨겨진 문제가 드러난 것이기도 하지만, 수익 확대를 위한 사용자 참여 확대를 위해 모델을 손 본 AI 기업의 탓이 크다.

지난해에는 챗봇이 청소년의 자살을 유도했다는 사례가 처음 등장한 데 이어, 올해에는 아부와 망상 부추김 등이 잇달아 보고됐다. 

이 문제는 AI 기업이 연구실에서 서비스 기업으로 확장 중이라는 것을 보여주기도 한다. 사용자가 9억명을 넘어서며, 과거 소셜 미디어 등이 겪었던 문제를 반복하는 것으로 볼 수 있다.

또 이제까지는 환각이나 편향 등 기술적인 문제로 치부했던 AI의 문제를 사회적인 차원으로 끌어 올린 것으로 볼 수 있다. 즉, AI 안전 문제가 인류 멸망과 같은 극단적인 디스토피아에 머물지 않고 규제 등의 논의를 이끈 구체적인 사례다.

3. 205131_206644_25.png
(사진=과기정통부)

8. 국가대표 모델

국내에서는 독자 AI 파운데이션 모델 즉, ‘국가대표 모델’ 선정이 최고의 이슈였다. 지난해부터 거론됐던 이 프로젝트는 새 정부 출범으로 본격화했고, 지난여름 내내 화제가 됐다. 그 결과, 5개의 컨소시엄이 선정됐다.

기업들은 국가대표라는 타이틀을 놓치지 않기 위해 애를 썼다. 선정 직전에는 기업들이 일제히 자체 모델을 선보였다. 지난 몇년간 국내에서 출시된 모델보다 올해 선보인 모델이 더 많다고 꼽힐 정도였다.

이처럼 이번 프로젝트는 미국이나 중국에 비해 잠잠하던 파운데이션 모델 출시에 불을 댕겼고, 기업의 기술 경쟁을 유발했다는 점에서는 긍정적으로 볼 수 있다.

앞으로 등장할 국대 모델의 성능은 물론, 활용성이 더 중요하다. 글로벌 프론티어 모델이나 해외 오픈 소스에 맞서 경쟁력을 확보할 수 있을지의 문제다.

하지만, 올해 국내 AI 업계에 실질적인 영향을 미친 것은 B2B 중심의 버티컬 AI로 볼 수 있다. 산업별 특화 LLM을 통해 금융과 제조, 헬스케어 등 특정 도메인의 문제를 해결하는 데 집중했다. 범용성보다는 전문성으로 이동했다고 보는 것이 맞다. 

소비자 시장에서는 ‘제타’나 ‘크랙’ 등 캐릭터 챗봇이 젊은 층을 중심으로 상업 성공의 조짐을 보였다.

또 정부는 국내의 AI 반도체(NPU) 스타트업을 중심으로 소버린 AI 전략을 결합해 하드웨어 국산화를 위해 드라이브를 걸었다.

9. 기타 – AI의 경계 확장과 충돌

올해 AI 챗봇의 폭발적인 성장을 견인한 것은 이미지 생성 기능이었다. 지난 3월 챗GPT의 ‘지브리 스타일’과 9월 구글의 ‘나노 바나나’ 등이 주인공이다. 

이는 기존 모델의 성능에 집중하던 AI 업계의 분위기에도 큰 영향을 미쳤다. 오픈AI는 이달 초 ‘코드 레드’를 발령했는데, 여기에는 사용자의 챗봇 활용 경험을 개선하는 데 집중하는 것이 목표로 제시됐다. 그리고 새로운 이미지 생성 모델도 내놓았다.

이처럼 AI로 생성한 이미지와 영상은 AI 슬롭이라는 단어를 만들어 냈다. 오픈AI의 동영상 생성 앱 ‘소라’의 인기와 메타의 ‘바이브’ 출시 등이 이를 부채질했다.

저작권에 대한 논쟁도 거세졌다. 특히 앤트로픽은 업계에서 처음으로 저작권을 인정하는 소송 합의안을 내놓았다. ‘공정 사용(Fair Use)’은 내년에도 쟁점 사항이 될 것으로 보인다.

‘검색 엔진 최적화(SEO)’에 이어 ‘생성 엔진 최적화(GEO)’라는 용어가 등장한 것도 두드러졌다. 이는 20여년이 넘도록 정보 획득의 주요한 방법으로 자리 잡은 검색이 이제는 AI 챗봇으로 이동하고 있다는 것을 보여주는 사례이기 때문이다.

이 밖에도 ‘AI 안경’으로 대표된 웨어러블도 주목할 만하다. 특히 오픈AI가 챗GPT 전용 장치를 준비 중으로, 이는 내년의 주요 키워드로 떠오를 가능성이 크다.

AI타임스 news@aitimes.com

[출처] https://www.aitimes.com/news/articleView.html?idxno=205131

Loading

17 12월 2025

[인공지능 개발자] [알아봅시다] Ollama Python에서 사용하기

[인공지능 개발자] [알아봅시다] Ollama Python에서 사용하기

post-thumbnail

이전 포스트에서 테스트 해봤던 Ollama를 쫌 더 다양하게 활용하기 위해 Python에서 사용하는 실습을 진행해보았다. 이번에는 예제 코드를 활용한 간단한 기능한 구현해보고 앞으로 HuggingFace 모델 가져오기, LangChain과 함께 사용하기 등 추가 실습을 더 진행해볼 예정이다.

실습은 파이썬 가상환경을 만들어서 진행했고, 한국어로 사용할 수 있는 모델을 찾기 위해서 여러 모델들을 테스트 해보았다. 한국어 채팅은 Gemma의 성능이 가장 좋았다. 아래 실습에서는 여러 모델을 섞어서 진행하겠다.

  • Llama2
  • Mistral
  • Solar
  • Gemma

test-result

구글의 Gemma만 제대로된 답변을 주고 있다. (역시 따끈따끈한 모델..) Solar는 한국에서 만들었는데(Upstage) 학습할 때 한국어 데이터셋을 많이 안 포함 시킨 건지 왜 성능이..? (10.7B size 기준)
.
.
.

설치 및 세팅

파이썬에서 Ollama를 사용하는 방법은 공식 깃헙 에서 잘 설명해주고 있다.

pip install ollama

우선 Ollama를 설치한다. (가상환경에서 진행하므로 이전에 terminal에서 설치해 준 것과 무관하게 다시 설치해줘야 한다)

import ollama
ollama.pull('llama2')

ollama를 import하고 모델을 설치해준다. 터미널에서 ollama run gemma를 통해 모델을 다운로드하고 바로 실행할 수 있지만, python에는 모델을 pull해온다. ollama.list()를 통해서 설치한 모델 리스트를 확인할 수 있고 ollama.delete('llama2')를 통해 모델을 삭제할 수도 있다.

response = ollama.chat(model='solar', messages=[
  {
    'role': 'user',
    'content': 'Why is the sky blue?',
  },
])
print(response['message']['content'])

content에 input prompt를 작성하면 답변이 생성된다. model을 바꿔가면서 테스트해봤는데, 모델에 따라서 답변의 길이, 응답 특성 등이 살짝씩 달랐다.

임베딩 벡터 얻기 + 검색(with ChromaDB)

Ollama에 이 기능이 공개된 건 꽤 최근인 것 같은데, 답변을 출력할 뿐만 아니라 답변의 embedding vector를 제공한다는 것이다. 공식 문서에서는 RAG를 구축하는데 사용할 수 있다고 설명하고 있고 (1)임베딩 (2)DB저장 (3)검색 (4)답변생성 의 과정을 실습해볼 수 있는 예시를 제공한다. 코드는 모두 Ollama에서 제공한 것이며, 사용 모델만 내가 설치한 모델로 바꿔서 진행하였다.

ollama.embeddings(model='mistral', prompt='The sky is blue because of rayleigh scattering')

위 코드를 실행하면 출력 결과로 답변과 함께 embedding vector가 나온다.

다음으로는 Ollama와 ChromaDB를 각각 사용해서 임베딩 벡터를 생성하고 저장한 뒤 검색하는 과정을 진행해보겠다.

pip install chromadb

우선 ChromaDB를 설치한다.

import ollama
import chromadb

documents = [
  "Llamas are members of the camelid family meaning they're pretty closely related to vicuñas and camels",
  "Llamas were first domesticated and used as pack animals 4,000 to 5,000 years ago in the Peruvian highlands",
  "Llamas can grow as much as 6 feet tall though the average llama between 5 feet 6 inches and 5 feet 9 inches tall",
  "Llamas weigh between 280 and 450 pounds and can carry 25 to 30 percent of their body weight",
  "Llamas are vegetarians and have very efficient digestive systems",
  "Llamas live to be about 20 years old, though some only live for 15 years and others live to be 30 years old",
]

client = chromadb.Client()
collection = client.create_collection(name="docs2")

# store each document in a vector embedding database
for i, d in enumerate(documents):
  response = ollama.embeddings(model="mistral", prompt=d)
  embedding = response["embedding"]
  collection.add(
    ids=[str(i)],
    embeddings=[embedding],
    documents=[d]
  )

documents에는 임베딩을 진행한 문서를 넣어주고, embedding model은 mistral을 사용했다. 데이터양이 적어서 금방 실행된다.

# an example prompt
prompt = "What animals are llamas related to?"

# generate an embedding for the prompt and retrieve the most relevant doc
response = ollama.embeddings(
  prompt=prompt,
  model="mistral"
)
results = collection.query(
  query_embeddings=[response["embedding"]],
  n_results=1
)
data = results['documents'][0][0]

prompt에 질문을 넣어주면 해당 질문의 답변을 얻을 수 있는 가장 유사한 문장을 documents에서 찾는다. (embedding vector로 가장 유사도가 높은 문장을 찾는 걸로 알고 있는데, 정확한 방법은 알지 못한다. 추후 Langchain과 함께 사용하는 부분에 추가하겠다)

output = ollama.generate(
  model="mistral",
  prompt=f"Using this data: {data}. Respond to this prompt: {prompt}"
)

print(output['response'])

가장 유사성이 높은 문장을 찾아오는 것까지도 유용하지만, 그 문장을 가지고 다시 model에 넣어서 매끄러운 답변을 생성하는 과정이다.

여기까지 하면 거의 ChatGPT와 같은 모델을 뚝딱 만들어 낸 것이다! 좀 더 많은 기능들을 붙이거나 미세한 조정(chunk size 조정 등) LangChain을 사용하는 것이 유용하겠지만, 이렇게 간단한 작업은 각각 불러와서 진행해도 충분할 것 같다.

참고자료

[출처] https://velog.io/@cathx618/Ollama-Python%EC%97%90%EC%84%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

Loading

10 12월 2025

[인공지능 개발자] Spring AI로 LLM 연결하기(Feat: ollama)

[인공지능 개발자] Spring AI로 LLM 연결하기(Feat: ollama)

들어가면서

올해 초 LLM에 관심이 생겨 이것저것 찾아보다가 Spring AI를 알게 되었고, 최근 정식 버전인 1.0.0이 출시되면서 본격적으로 공부하게 되었습니다.
제가 느끼기에 Spring AI는 LLM 연결을 매우 쉽게 도와주며, 다음과 같은 다양한 기능을 제공합니다:

  • 프롬프트 전처리/후처리를 위한 Advisor
  • JSON → DTO 구조화 출력 지원
  • LLM이 메서드를 직접 호출하는 Function Calling
  • RAG, MCP, 멀티모달 등 다양한 고급 기능 지원

덕분에 이제는 Python 기반 도구가 아니더라도, Java 환경에서도 LLM을 효과적으로 활용할 수 있게 되었습니다.
이 블로그 시리즈는 총 3편으로 구성될 예정이며, 각 주제는 다음과 같습니다:

  1. Spring AI로 LLM 연결하고 구조화된 출력하기
  2. Advisor로 LLM에 추가 정보 제공 및 응답 가공하기 (feat. RAG)
  3. Function Calling으로 LLM에게 메서드 제공하기 (feat. AI Agent)
    이번 포스팅은 그 첫 번째 주제인 “Spring AI로 LLM 연결하고 구조화된 출력하기”입니다.

기본적인 설정법

Spring AI는 다양한 LLM 제공자(OpenAI, Azure, Ollama 등)와 연동할 수 있습니다.
저는 이 포스팅에서 로컬에서 실행 가능한 오픈소스 플랫폼인 Ollama를 기준으로 설명하겠습니다.

  • 참고: Spring AI는 Java 17 이상부터 지원됩니다.

Ollama는 다양한 오픈소스 LLM을 PC에 직접 다운로드하여 실행할 수 있는 플랫폼입니다.
따라서 외부로 유출되면 안 되는 개인정보나 대외비 문서를 처리할 때 적합한 선택이 될 수 있습니다.

 - 의존성 추가 (Maven 기준)
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-model-ollama</artifactId>
</dependency>
 - 설정 파일 기본적인 설정
 # Ollama 서버 주소
spring.ai.ollama.base-url=http://localhost:11434 
# 모델 다운로드 전략(always, when_missing, never)
spring.ai.ollama.init.pull-model-strategy=when_missing
# 기본 셋팅 llm모델
spring.ai.ollama.chat.model= qwen3:1.7b 
# 창의성 조절: 높을수록 자유로운 응답
spring.ai.ollama.chat.temperature= 0.8
# 최대 응답 토큰 수
spring.ai.ollama.chat.max-tokens= 1024
# Embedding 모델
spring.ai.ollama.embedding.model=bona/bge-m3-korean

추가적인 설정에 대해서는 url에서 확인 가능합니다.
https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html#_chat_properties


예제 코드

Spring AI에서는 LLM의 응답을 두 가지 방식으로 받을 수 있습니다.

  1. 단일 출력 방식: 한 번에 전체 응답을 받아 처리
  2. 스트리밍 출력 방식 (Flux): LLM 응답을 실시간으로 조각 단위로 받기
    예제를 통해 두 방식의 사용법과, JSON 구조화된 출력 방식까지 함께 살펴보겠습니다.

???? ChatModel과 ChatClient의 차이

Spring AI에는 ChatModel과 ChatClient라는 두 개의 주요 구성 요소가 있습니다.

  • ChatModel: LLM과의 저수준 통신 역할을 합니다.
  • ChatClient: ChatModel을 래핑한 상위 레벨 API로, 프롬프트 구성, 응답 처리, Advisor, RAG 등 다양한 확장 기능을 제공합니다.

단일 출력 방식

@AllArgsConstructor
@RestController
public class ModelClient {

    // Spring이 OllamaChatModel 구현체 자동 주입
    private final ChatModel chatModel;

    @GetMapping("/v1/model-client")
    public ChatResponse modelClientV1(@RequestParam("text") String text) {

        // 시스템 메시지는 LLM이 반드시 지켜야 할 지침
        // 유저 메시지는 사용자의 입력
        Prompt prompt = new Prompt(
                List.of(
                        new SystemMessage("너는 친절한 AI 비서야. 절대 추론 과정을 보여주지 말고 요약만 응답해."),
                        new UserMessage(text)
                ));

        return ChatClient.create(chatModel)
                .prompt(prompt)
                .call()
                .content(); // 전체 응답을 한 번에 반환
    }
}

스트리밍 출력 방식 (Flux)

스트리밍 방식은 채팅처럼 실시간으로 응답이 필요한 UI에 적합합니다.

@AllArgsConstructor
@RestController
public class ModelClient {

  private final ChatModel chatModel;

  @GetMapping(value = "/v2/model-client", produces = "text/plain;charset=UTF-8")
  public Flux<String> getModelClientV2(@RequestParam("text") String text) {

      // 시스템 메시지는 LLM이 반드시 지켜야 할 지침
      // 유저 메시지는 사용자의 입력
      Prompt prompt = new Prompt(
              List.of(
                      new SystemMessage("너는 친절한 AI 비서야"),
                      new UserMessage(text)
              ));

      return ChatClient.create(this.chatModel)
              .prompt(prompt)
              .stream() // 스트리밍 응답 시작
              .content(); // Flux<String>으로 실시간 조각 응답 수신
    }
}

구조화된 출력 받기 (JSON → DTO)

내부적으로는 LLM에게 “이런 구조로 응답해줘”라고 명시한 후 결과를 DTO에 바인딩합니다.
하지만 LLM이 해당 형식대로 정확하게 응답하지 않으면 파싱 에러가 발생할 수 있습니다.
안정성을 높이기 위해 시스템 메시지에 형식을 반복적으로 명확히 명시하거나, 구조 유도 프롬프트 예제를 함께 제공하는 것이 좋습니다.

@AllArgsConstructor
@RestController
public class ModelClient {

    private final ChatModel chatModel;

    @GetMapping("/v3/model-client")
    public ActorFilms modelClientV3(@RequestParam("text") String text) {

        // 사용자 입력을 이용해 프롬프트 템플릿 구성
        String template = """
            Generate the filmography of 5 movies for {actor}.
        """;

        Prompt prompt = new Prompt(
                List.of(
                        new SystemMessage("너는 친절한 AI 비서야. 절대 추론 과정을 보여주지 말고 요약만 응답해."),
                        new UserMessage(new PromptTemplate(template).render(Map.of("actor", text)))
                ));

        ChatModel gemma = OllamaChatModel.builder()
                .ollamaApi(OllamaApi.builder().build())
                .defaultOptions(
                        OllamaOptions.builder()
                                .model("gemma3n:e4b")
                                .temperature(0.4)
                                .build())
                .build();

        return ChatClient.create(gemma)
                .prompt(prompt)
                .call()
                .entity(ActorFilms.class); // 결과를 DTO로 구조화
    }

    record ActorFilms(String actor, List<String> movies) {}
}

프롬프트 요청 예시 (내부 동작 확인용)
Spring AI가 구조화 출력을 위해 내부적으로 LLM에게 다음과 같이 요청을 구성합니다.

request: ChatClientRequest[
- 저희가 입력한 명령 프롬프트 입력입니다.
prompt=Prompt{
    messages=[SystemMessage{textContent='너는 친절한 AI 비서야. 절대 추론과정을 보여주지 말고 요약만 응답해', messageType=SYSTEM, metadata={messageType=SYSTEM}}, 
    UserMessage{content='Generate the filmography of 5 movies for 하정우.', properties={messageType=USER}, messageType=USER}], modelOptions=org.springframework.ai.ollama.api.OllamaOptions@48e29a2c}, 

- 여기에 해당 DTO 객체의 정의가 들어갑니다.
context={spring.ai.chat.client.output.format=Your response should be in JSON format.
Do not include any explanations, only provide a RFC8259 compliant JSON response following this format without deviation.
Do not include markdown code blocks in your response.
Remove the ```json markdown from the output.
Here is the JSON Schema instance your output must adhere to:
```{
  "$schema" : "https://json-schema.org/draft/2020-12/schema",
  "type" : "object",
  "properties" : {
    "actor" : {
      "type" : "string"
    },
    "movies" : {
      "type" : "array",
      "items" : {
        "type" : "string"
      }
    }
  },
  "additionalProperties" : false
}```
}]

마치며

AI를 실제 프로젝트에 도입하는 것은 어렵고 복잡할 것 같다는 막연한 생각이 있었지만,
Spring AI를 통해 Java 환경에서도 LLM을 손쉽게 연결하고 활용할 수 있다는 가능성을 확인할 수 있었습니다.

물론 성능, 속도, 프롬프트 설계, 적절한 모델 선택 등 실무에서 고려할 요소들은 많지만,
이번 실습을 통해 LLM을 실제 서비스에 적용하는 출발점을 잡을 수 있었습니다.

다음 포스팅에서는 Advisor 기능을 활용해 LLM 응답을 가공하고,
간단한 RAG(Retrieval-Augmented Generation) 기능을 구현해보겠습니다.

이 기능은 Logging, 크롤링된 문서, RDBMS 정보 등 다양한 외부 지식 소스를 LLM과 연결해
더 정확하고 신뢰도 높은 응답을 생성하도록 도와주는 방식입니다.

해당 예시는 github에 있습니다.
url: https://github.com/Zero-Human/springAi

참고자료

[출처] https://zero-human.tistory.com/9

Loading

2 12월 2025

Ollama 설치부터 모델 커스텀까지, 비개발자도 이해하는 이용 가이드

Ollama 설치부터 모델 커스텀까지, 비개발자도 이해하는 이용 가이드

 
개발자 PC에 로컬 LLM을 구축하는 가장 쉬운 방법, Ollama 설치 및 사용법을 소개합니다. Windows, Mac, Linux 설치부터 Modelfile 커스텀, REST API 연동까지 실용적인 예제를 통해 로컬 AI 개발의 첫걸음을 안내합니다.
 
Sep 18, 2025
 
Ollama 설치부터 모델 커스텀까지, 비개발자도 이해하는 이용 가이드
 

클라우드 API를 호출할 때마다 드는 비용 걱정, 사내 코드를 외부 AI 서비스에 보내는 찜찜함, 인터넷이 불안정할 때마다 멈춰버리는 개발 환경. 생성형 AI를 적극적으로 활용하고 싶은 개발자라면 누구나 한 번쯤 겪어봤을 불편함입니다. 만약 이 모든 제약 없이, 내 PC 안에서 자유롭게 LLM을 실행하고 테스트할 수 있다면 어떨까요?

이러한 개발자들의 갈증을 해소해 주는 최고의 솔루션으로 ‘Ollama’가 부상하고 있습니다. Ollama는 Llama 3, Mistral 등 강력한 오픈소스 LLM을 단 몇 줄의 명령어로 내 컴퓨터에 설치하고 실행할 수 있게 해주는 놀라운 도구입니다. 데이터는 내 PC 밖으로 절대 나가지 않으며, 비용도, 인터넷 연결도 필요 없습니다.

이 글에서는 개발자의 관점에서 Ollama를 설치하고, 핵심 기능을 익히고, 나만의 모델로 커스터마이징하여 최종적으로 내 애플리케이션과 연동하는 기초까지, 로컬 LLM 개발의 전체적인 그림을 완벽하게 마스터할 수 있도록 안내합니다.

Ollama 공식 홈페이지
Ollama 공식 홈페이지

1. Ollama, 3분 만에 설치하고 시작하기

Ollama의 가장 큰 장점은 압도적으로 간단한 설치 과정입니다. 복잡한 환경 설정 없이 각 운영체제에 맞는 방법으로 설치를 진행하세요.

1-1. Windows에 설치하기

  1. Ollama 공식 홈페이지에 접속하여 ‘Download for Windows’ 버튼을 클릭해 설치 파일을 다운로드합니다.
  2. 다운로드한 OllamaSetup.exe 파일을 실행하고 안내에 따라 설치를 완료합니다.
  3. 설치가 완료되면 Ollama는 백그라운드 서비스로 자동 실행됩니다. 터미널(CMD 또는 PowerShell)을 열고 다음 명령어를 입력해 보세요.
ollama --version

버전 정보가 정상적으로 출력된다면 설치에 성공한 것입니다.

1-2. macOS에 설치하기

  1. Ollama 공식 홈페이지에서 ‘Download for macOS’를 클릭합니다.
  2. 다운로드한 Ollama-darwin.zip 파일의 압축을 풀고 Ollama 앱을 ‘응용 프로그램’ 폴더로 옮깁니다.
  3. 앱을 실행하면 메뉴 막대에 Ollama 아이콘이 나타나며 백그라운드에서 실행됩니다. 터미널을 열고 동일하게 버전 확인 명령어를 실행합니다.
ollama --version
MacOS 터미널에서 Ollama 실행 화면
MacOS 터미널에서 Ollama 실행 화면

1-3. Linux에 설치하기

Linux에서는 터미널에 아래 명령어 한 줄만 입력하면 설치가 완료됩니다.

curl -fsSL <https://ollama.com/install.sh> | sh

이제 모든 준비가 끝났습니다. 본격적으로 LLM을 다뤄볼 시간입니다.

2. 터미널에서 LLM 조련하기: Ollama 핵심 명령어

Ollama는 직관적인 CLI(Command-Line Interface)를 통해 모델을 관리합니다. 가장 중요한 명령어 4가지만 기억하면 됩니다.

2-1. 모델 실행 및 다운로드: run

가장 기본이 되는 명령어입니다. 원하는 모델을 지정하여 실행하면, 해당 모델이 로컬에 없는 경우 자동으로 다운로드한 후 실행합니다. 가장 인기 있는 Meta의 Llama 3 모델을 실행해 보겠습니다.

ollama run llama3

명령을 실행하면 모델 다운로드가 시작되고, 완료되면 >>> Send a message (/? for help) 라는 프롬프트가 나타납니다. 이제 자유롭게 질문을 던져보세요.

llama3 설치 화면
llama3 설치 화면

2-2. 모델 미리 다운로드: pull

run 명령어는 다운로드와 실행을 한 번에 처리하지만, 미리 필요한 모델을 받아두고 싶을 때도 있습니다. 이때 pull 명령어를 사용합니다.

# 코딩에 특화된 codellama 모델을 미리 다운로드
ollama pull codellama

2-3. 설치된 모델 목록 확인: list

내 PC에 어떤 모델들이 설치되어 있는지 확인하고 싶다면 list 명령어를 사용하세요. 모델 이름, ID, 크기, 수정 시간 등의 정보를 한눈에 볼 수 있습니다.

ollama list

2-4. 모델 삭제: rm

더 이상 사용하지 않는 모델을 삭제하여 디스크 공간을 확보하려면 rm 명령어를 사용합니다.

ollama rm codellama
Ollama로 llama3 설치 및 대화
Ollama로 llama3 설치 및 대화

3. 나만의 AI 비서 만들기: Modelfile 커스터마이징

Ollama의 진정한 강력함은 모델을 내 입맛에 맞게 커스터마이징할 수 있다는 점에서 드러납니다. Docker 사용 경험이 있다면 Dockerfile과 매우 유사한 Modelfile을 통해 이 작업을 수행할 수 있습니다.

Modelfile은 기반이 될 모델을 지정하고, 시스템 프롬프트나 파라미터 등을 사전에 설정하여 새로운 커스텀 모델을 만드는 설계도입니다. 예를 들어, 파이썬 코드 리뷰만 전문적으로 수행하는 ‘리뷰어 봇’을 만들어 보겠습니다.

1단계: Modelfile 개념 이해

Modelfile을 ‘AI를 위한 맞춤 설정 레시피’ 또는 ‘AI 캐릭터 설정집’이라고 생각하면 완벽합니다.

  • 기존 방식: ollama run llama3를 실행하면, 우리는 매번 대화를 시작할 때마다 “너는 이제부터 친절한 개발자 비서야. 한국어로만 대답해.” 와 같은 지시사항을 반복해서 입력해야 합니다.
  • Modelfile 방식: 이 ‘캐릭터 설정집’ 파일 안에 “너의 기본 모델은 llama3이고, 너의 역할은 친절한 개발자 비서이며, 항상 한국어로만 대답해야 해” 라는 설정을 미리 저장해 둡니다. 그리고 이 설정집을 바탕으로 **나만의 AI 모델*을 새로 만드는 것입니다.

핵심 장점: 한번 만들어두면, 매번 긴 지시사항을 입력할 필요 없이, 내가 만든 AI를 불러내기만 하면 항상 똑같은 설정으로 작동합니다.

2단계: Modelfile 만들기 (실제 파일 생성)

이제 ‘레시피’를 담을 빈 파일을 만들어 보겠습니다.

  1. 프로젝트 폴더로 이동: 터미널에서 현재 작업 중인 프로젝트 폴더로 이동합니다.
  2. 빈 파일 생성: 아래 명령어를 터미널에 입력하여 Modelfile이라는 이름의 빈 파일을 만듭니다. (가장 중요: 확장자가 없습니다. Modelfile.txt가 아니라 그냥 Modelfile 입니다.)
    touch Modelfile

    (또는 VS Code와 같은 코드 에디터에서 직접 ‘새 파일 만들기’로 Modelfile을 생성해도 됩니다.)

Modelfile 실행화면
Modelfile 실행화면

3단계: Modelfile 안에 내용 작성하기

Modelfile이 있는 폴더 혹은 VS Code로 Modelfile을 열고, 그 안에 AI에게 내릴 지시사항을 적어줍니다. 가장 기본적이고 필수적인 3가지 명령어가 있습니다.

A. FROM (기반 모델 지정)

  • 의미: “어떤 기본 AI 모델을 커스텀할 것인가?”를 정합니다. 레시피의 가장 기본 재료와 같습니다.
  • 작성법: (이것은 ‘최신 버전의 llama3 모델을 기반으로 만들겠다’는 뜻입니다.)
    FROM llama3:latest

B. SYSTEM (역할 및 지시사항 부여)

  • 의미: AI에게 영구적으로 적용될 기본 지시사항이나 역할을 부여합니다. AI의 ‘성격’이나 ‘세계관’을 정해주는 것과 같습니다.
  • 작성법: (따옴표 세 개(""")를 사용하면 여러 줄의 긴 지시사항을 쓸 수 있어 편리합니다.)
    SYSTEM """
    You are a professional front-end developer assistant.
    Your primary role is to help users with React, TypeScript, and Git.
    Always provide answers in Korean.
    Provide clear, concise code examples when necessary.
    """

C. PARAMETER (세부 설정 조정)

  • 의미: AI의 행동을 미세하게 조정하는 ‘설정값’입니다. 예를 들어 AI의 ‘창의성’ 수치를 조절할 수 있습니다.
  • 작성법 (가장 많이 쓰는 temperature 예시):
    PARAMETER temperature 0.7
    • temperature (온도): AI의 답변이 얼마나 창의적이고 무작위적일지를 결정합니다.
      • 0에 가까울수록: 매우 사실적이고 결정론적인 답변을 합니다. (보고서 작성 등)
      • 1에 가까울수록: 매우 창의적이고 예측 불가능한 답변을 합니다. (소설 쓰기 등)
      • 보통 0.5 ~ 0.7 사이를 많이 사용합니다.
Modelfile 내 내용 입력 화면
Modelfile 내 내용 입력 화면

4단계: ‘나만의 AI’ 생성하기

이제 완성된 Modelfile을 저장 후 Ollama에게 주고, 새로운 모델을 만들어달라고 요청할 차례입니다.

  • 명령어:
    ollama create {my-assistant} -f ./Modelfile
  • 명령어 분석:
    • ollama create: “새로운 모델을 만들어줘!”
    • my-assistant: 내가 새로 만들 AI 모델의 이름입니다. (원하는 대로 지으면 됩니다.)
    • f ./Modelfilef는 file을 의미하며, “이 레시피(Modelfile)를 사용해서 만들어줘!” 라는 뜻입니다.

이 명령어를 실행하면, 터미널에 진행 상태가 표시되면서 새로운 모델이 생성됩니다.

터미널에서 Modelfile 실행 화면
터미널에서 Modelfile 실행 화면

5단계: ‘나만의 AI’ 사용하기 (모델 실행)

이제 모든 준비가 끝났습니다! 터미널에 아래 명령어를 입력해 보세요.

ollama run my-assistant

이제 나타나는 채팅창에서 AI에게 말을 걸면, Modelfile에 저장했던 모든 지시사항(개발자 비서 역할, 한국어 사용, 창의성 0.7 등)이 자동으로 적용된 상태로 대답할 것입니다. 더 이상 매번 긴 프롬프트를 입력할 필요가 없습니다.

Modelfile 적용 시 대화 화면
Modelfile 적용 시 대화 화면

이제 당신의 아이디어를 펼칠 시간

지금까지 Ollama를 통해 로컬 PC에 강력한 LLM을 설치하고, 터미널 명령어로 자유롭게 다루며, Modelfile로 나만의 AI를 만드는 첫걸음까지 내디뎠습니다.

Ollama는 데이터 프라이버시, 비용, 인터넷 제약으로부터 개발자를 해방시키는 강력한 도구입니다. 개인용 코드 조수부터 복잡한 자연어 처리 기능이 필요한 애플리케이션의 프로토타이핑까지, 이제 여러분의 손에는 상상하는 무엇이든 만들어볼 수 있는 강력한 ‘엔진’이 쥐어졌습니다.

물론 오늘 다룬 내용은 로컬 LLM의 무한한 가능성을 향한 시작점일 뿐입니다. 이 강력한 엔진을 활용해 실제 프로덕션 수준의 시스템을 구축하는 여정에는 더 많은 기술적 과제들이 기다리고 있을 것입니다.

이제 여러분의 아이디어를 로컬 LLM 위에서 마음껏 펼쳐보세요.

Happy Hacking!

[출처] https://peekaboolabs.ai/blog/ollama-installation-guide

Loading

24 11월 2025

[google 안티그래피티] [알아봅시다] Google Antigravity – 에이전트 시대에 어울리는 새로운 AI 기반 IDE 

[google 안티그래피티] [알아봅시다] Google Antigravity – 에이전트 시대에 어울리는 새로운 AI 기반 IDE 

15P by GN⁺ 6일전 | ★ favorite | 댓글 5개
  • 에이전트 중심의 AI 기반 개발환경으로, 복잡한 소프트웨어 작업을 자율적으로 계획·실행할 수 있는 Google의 통합 IDE 플랫폼
  • Gemini 3 모델을 기반으로, 브라우저 제어·비동기 상호작용·에이전트 관리 기능을 결합한 복합 개발 워크플로우로 차세대 IDE 형태 구현
  • 자연어 코드 명령탭 자동완성상황 인식형 에이전트를 제공해 개발 효율 향상
  • 에이전트 활동 모니터링검증 결과 시각화피드백 통합 등으로 사용자가 에이전트의 작업을 검증하고 협업할 수 있어 신뢰성과 협업성 강화
  • Manager와 Editor 두 가지 인터페이스를 통해 동기·비동기 작업을 유연하게 전환하며, 여러 에이전트를 병렬로 관리 가능
  • 현재 MacOS, Linux, Windows에서 무료 공개 미리보기로 제공되며, Gemini 3, Claude Sonnet 4.5, GPT-OSS 모델을 선택적으로 활용 가능

Google Antigravity 개요

  • Google Antigravity는 AI IDE(Core) 로, 개발자가 코드 작성과 관리 과정에서 에이전트 중심의 자동화 기능을 활용할 수 있는 환경 제공
    • 기존 IDE를 넘어, 에이전트가 자율적으로 소프트웨어 개발 전 과정을 수행할 수 있도록 설계
    • 브라우저 제어와 비동기 상호작용을 지원해, 사용자가 직접 개입하지 않아도 복잡한 작업을 처리 가능
    • 탭 자동완성(tab autocompletion) , 자연어 코드 명령(natural language code commands) , 상황 인식형 구성 에이전트(context-aware configurable agent) 기능 포함
  • 사용자 신뢰 구축을 목표로 설계되었으며, 대규모 기업 코드베이스에서 일하는 전문가부터 취미 개발자까지 모두를 대상으로 함
  • Antigravity는 공개 미리보기(public preview) 형태로 무료 제공되며, Gemini 3 Pro 사용에 관대한 레이트 리밋 제공

개발 배경

  • Gemini 3 수준의 모델은 장시간 개입 없이 여러 환경에서 지속적으로 작업 수행 가능
  • 이에 따라, 사용자와 에이전트 간의 상호작용 방식이 단일 프롬프트 중심에서 고차원적 추상화 수준으로 이동
  • Antigravity는 이러한 변화에 맞춰 새로운 제품 인터페이스를 제시

핵심 원칙 (Core Tenets)

Antigravity는 신뢰(Trust) , 자율성(Autonomy) , 피드백(Feedback) , 자기개선(Self-improvement) 네 가지 원칙을 중심으로 구성

  • 신뢰 (Trust)

    • 기존 제품은 모든 에이전트 동작을 노출하거나, 결과만 보여주는 양극단 구조
    • Antigravity는 작업 단위(Task-level) 로 맥락을 제공하고, 검증 결과와 산출물(Artifacts) 을 함께 제시
      • 산출물에는 작업 목록, 구현 계획, 단계별 설명, 스크린샷, 브라우저 녹화 등이 포함
      • 사용자는 이를 통해 에이전트의 사고 과정과 검증 절차를 확인 가능
  • 자율성 (Autonomy)

    • 에디터, 터미널, 브라우저 간 동기화된 에이전트 제어(synchronized agentic control) 지원
    • 기본 인터페이스는 AI 기반 IDE(Editor view) 로, 탭 자동완성·인라인 명령·사이드패널 에이전트 기능 포함
    • Gemini 3 모델을 활용해, 에이전트가 코드 작성·로컬 실행·브라우저 테스트를 자율적으로 수행
    • Manager view에서는 여러 에이전트를 병렬로 관리하며, 비동기적 상호작용 지원
      • 예: 한 에이전트가 백그라운드 리서치를 수행하는 동안, 다른 작업을 전면에서 진행 가능
    • Editor와 Manager 간 즉시 전환이 가능하도록 설계되어, 비동기 개발 시대에 최적화
  • 피드백 (Feedback)

    • 원격형 에이전트의 한계를 보완하기 위해 직관적 피드백 시스템 도입
      • 텍스트 산출물에는 Google Docs 스타일의 주석, 시각적 산출물에는 선택·코멘트 기능 제공
      • 피드백은 에이전트 실행 중에도 자동 반영되어, 프로세스를 중단하지 않음
    • 다양한 인터페이스와 산출물 전반에서 피드백을 직관적으로 통합하고, 이를 통해 에이전트의 작업을 지속적으로 개선 및 조정
  • 자기개선 (Self-improvement)

    • Antigravity는 학습을 핵심 기능으로 내재화
      • 에이전트의 모든 행동은 지식 베이스에 저장·활용되어, 과거 작업으로부터 학습
      • 코드 스니펫, 아키텍처 정보, 작업 절차 등 명시적·추상적 지식을 모두 축적
      • 사용자는 Agent Manager에서 이러한 지식 항목을 확인 가능

개발자 유형별 활용 사례

  • Frontend Developer
    • 브라우저 기반 에이전트를 활용해 반복 작업을 자동화하고 UX 개발 효율 향상
  • Full Stack Developer
    • 완성도 높은 산출물과 포괄적 검증 테스트를 통해 프로덕션 수준 애플리케이션 구축 지원
  • Enterprise Developer
    • Agent Manager를 이용해 여러 워크스페이스의 에이전트를 조율, 작업 전환(context switching) 감소 및 운영 효율화

사용 및 접근

  • Google Antigravity는 현재 무료 공개 미리보기(Public Preview) 로 제공
    • MacOS, Linux, Windows 지원
    • Gemini 3, Claude Sonnet 4.5, GPT-OSS 모델을 선택적으로 사용 가능
    • 무제한 탭 자동완성, 무제한 명령 요청, 넉넉한 Rate Limit 제공
  • 추가 기능과 사례는 공식 문서(docs) 및 사용 사례(use cases) 페이지에서 확인 가능
  • 업데이트는 XLinkedInYouTube 공식 채널을 통해 지속 발표 예정
  • 팀/엔터프라이즈 플랜도 공개 예정

[출처] https://news.hada.io/topic?id=24462&utm_source=weekly&utm_medium=email&utm_campaign=202547

Loading

21 11월 2025

[알아봅시다] 깃허브에서 가장 많이 사용한 언어는?…연례 보고서 공개

[알아봅시다] 깃허브에서 가장 많이 사용한 언어는?…연례 보고서 공개

 

깃허브에서 가장 많이 사용한 언어는?…연례 보고서 공개

  •  AI리포터
  •  

  •  승인 2025.11.18 11:38

 

AI요약 ☞ 깃허브가 2025년 연례 보고서를 통해 지난 1년간 1억8000만명 이상의 개발자가 신규 유입됐으며, 총 프로젝트 수가 6억3000만개를 돌파했다고 밝혔다. 프로그래밍 언어 순위에서는 타입스크립트가 파이썬을 제치고 1위를 차지했으며, 국가별 순위에서는 인도가 중국을 넘어 2위로 올라섰다.

605644_561275_1835.png
깃허브가 2025년 연례 보고서를 발표했다. [사진: 깃허브]

[디지털투데이 AI리포터] 글로벌 개발 플랫폼 깃허브(GitHub)가 2025년 연례 보고서 ‘옥토버스 2025′(Octoverse 2025)를 발표하며, 플랫폼 내 개발자 증가와 프로그래밍 언어 트렌드를 공개했다. 

17일(현지시간) IT매체 아이티미디어에 따르면, 2025년 8월 기준 깃허브 프로젝트 수는 6억3000만개로 집계됐으며, 지난 1년간 1억8000만명 이상의 개발자가 새롭게 유입됐다. 총 기여자 수는 11억2000만명을 돌파하며, 깃허브의 개발자 생태계가 더욱 확장되고 있음을 보여줬다.

국가별 개발자 수 순위에서는 미국이 1위를 유지했으며, 지난해 2위였던 중국을 제치고 인도가 2위에 올랐다. 이어 3위는 중국, 6위는 일본이 차지했다. 깃허브는 3년 내 인도가 미국을 넘어 최대 개발자 국가가 될 것으로 전망했다.

프로그래밍 언어 순위에서는 타입스크립트(TypeScript)가 1위를 차지했다. 2023년까지 깃허브에서 가장 많이 사용된 언어는 자바스크립트(JavaScript)였으나, 지난해 파이썬(Python)이 1위에 올랐고, 올해는 타입스크립트가 다시 선두를 차지하며 빠르게 변화하는 트렌드를 보여주고 있다.

인공지능(AI) 도입 역시 가속화되고 있다. 새롭게 깃허브에 가입한 개발자의 80%가 가입 후 1주일 내 깃허브 코파일럿(GitHub Copilot)을 사용하는 것으로 나타났으며, 이는 AI 기반 개발 지원이 점점 더 보편화되고 있음을 의미한다. 

[출처] https://www.digitaltoday.co.kr/news/articleView.html?idxno=605644

Loading

2 11월 2025

[인공지능 기술] 텐서플로우(TensorFlow)에서 파이토치(PyTorch)로 환승하기

[인공지능 기술] 텐서플로우(TensorFlow)에서 파이토치(PyTorch)로 환승하기

*해당 포스팅은 이 원문을 번역, 정리(요약)한 것입니다.

텐서플로우가 파이토치보다 1년 먼저 나왔지만, 최근 많은 개발자들이 텐서플로우에서 파이토치로 넘어가고 있는 실정이다.

이번 아티클에서는 텐서플로우에서 파이토치로 넘어가는 방법에 대해 이야기하려고 한다. 

먼저 각 딥러닝 프레임워크를 사용하는 이유에 대해 살펴본 후, 간단한 예제를 통해 파이토치와 가까워지는 시간을 가져보려 한다.

1. 프레임워크 개요

1.1. 텐서플로우

2015년 구글에서 발표한 딥러닝 프레임워크. 텐서플로우 2.0로 업데이트되면서 케라스(keras)와 통합되었다.

1.2. 파이토치

2016년 페이스북에서 발표한 딥러닝 프레임워크. 파이썬 언어와 자연스럽게 어우러진다는 장점이 있다.

파이토치를 텐서 단위의 딥러닝 모델을 GPU 위에서 계산할 수 있는 플랫폼으로 이해할 수 있다.

동적인(dynamic) 그래프를 생성하고, 그때그때(on the fly) 모델의 동작 원리를 살펴볼 수 있다.

2. 왜 텐서플로우에서 파이토치로?

– 파이토치와 다르게 텐서플로우는 정적인(static) 그래프를 생성한다.

– 파이토치는 특정 그래프 작업에 맞춰 모델을 정의하고 조작할 수 있다. (RNN처럼 입력 길이가 가변적인 상황에서 유용)

– 파이토치는 근본적으로 파이썬을 기반으로 개발되었기 때문에 좀더 직관적이다.

– 텐서플로우가 익히기 좀더 까다로운 편. 

– 신속하게 프로토타입을 개발하고 연구하는 데 파이토치가 가장 적합하다.

3. 텐서플로우에서 파이토치로 넘어가기

GPU 환경에서 두 프레임워크를 설치하는 과정은 생략하겠습니다.

텐서플로우에서 파이토치로 넘어가는 건 그렇게 복잡한 편이 아니다.

파이토치는 문제를 해결하는 데 있어 파이써닉한 접근방식을 취하기 때문이다.

3.1. 텐서 다루기

각 프레임워크에서 임의의 텐서를 초기화해보자. 방법은 크게 다르지 않다.

텐서플로우

import tensorflow as tf

rank2_tensor = tf.constant([[1, 2],
                            [3, 4],
                            [5, 6]], dtype=tf.int32)

파이토치

import torch

rank2_tensor = torch.tensor([[1, 2],
                             [3, 4],
                             [5, 6]], dtype=torch.int32)

간단한 텐서 연산을 수행해보자.

텐서플로우

a = tf.constant([[1, 2],
                 [3, 4]])
b = tf.constant([[1, 1],
                 [1, 1]])
                 
a = tf.Variable(a)
b = tf.Variable(b)

print(tf.add(a, b), "n")
print(tf.multiply(a, b), "n")
print(tf.matmul(a, b), "n")

파이토치

a = torch.tensor([1, 2, 3], dtype=torch.float)
b = torch.tensor([7, 8, 9], dtype=torch.float)

print(torch.add(a, b))
print(torch.subtract(b, a))
print(a.mul(b))
print(a.dot(b))

3.2. 작동 메카니즘

딥러닝 프레임워크는 연산 그래프를 활용한다. 연산 그래프는 최선의 결과를 얻기 위해 연산이 이루어져야 하는 순서를 정의한다.

딥러닝 모델을 계산하기 위해 크게 두 개의 인터프리터가 사용되는데,

하나는 프로그래밍 언어에 이용되고(대부분의 경우 파이썬) 나머지 하나는 연산 그래프를 뜻대로 조작하는 데 사용된다.

따라서 연산 그래프를 세팅할 때는 파이썬 같은 프로그래밍 언어를 통해, 실행 메카니즘은 다른 언어를 통해 이루어지게 된다.

애초에 효율성 및 최적화 문제 때문에 이런 이상한(?) 세팅이 구성됐다고 볼 수 있다.

텐서플로우의 경우 정적인 연산 그래프를 활용한다. 전형적인 “Define and Run” 방식으로 작동한다. 처음에 모든 변수들을 생성, 연결한 다음, 이들을 정적인 세션에 초기화하게 된다.

하지만 이렇게 정적인 그래프에 변수 파라미터를 정의하는 방식이 비효율적이라고 여겨지기도 한다. 특히 RNN 형식의 모델을 쓰는 경우에 그렇다.

Define-and-Run : 연산 그래프를 먼저 정의한 후에 데이터를 흘려보내 결과를 얻는 방식

정적인 텐서플로우 그래프를 살펴보자.

import tensorflow as tf

a = tf.Variable(15)
b = tf.Variable(5)

prod = tf.multiply(a, b)
sum = tf.add(a, b)

result = prod/sum
print(result)

파이토치의 경우, 동적인 그래프를 활용하기 때문에 코드를 입력할 때 연산 그래프가 설계된다.

유저가 변수를 처음 선언할 때 연산 그래프가 바로 만들어지고, 각 훈련 iteration 마다 연산 그래프가 다시 만들어진다.

정적인 그래프보다 동적인 그래프를 선호하는 이유는, 다른 요소는 건드리지 않고 필요한 요소들만 수정할 수 있기 때문이다.

이러한 방법의 단점을 꼽자면 그래프를 재설계 하는 데 종종 시간이 좀더 걸린다는 점이다.

아래 움짤은 파이토치 작동 방식을 보여준다.

3.3. 반복 훈련(training loops)에서의 비교

텐서플로우에서 훈련 루프를 만드는 과정은 다소 복잡하고 직관과는 거리가 멀다.

보통은 tf.function을 데코레이터로 써서 정적 그래프 관점에서 모델을 컴파일 한다. 

일반적으로 텐서플로우는 즉시 실행(eager execution)을 활용한다. 이는 디버깅에는 용이하지만 빠른 실행에는 불리하다.

따라서 tf.function을 활용해서 전역적인(global) 퍼포먼스 최적화를 적용한다.

즉시 실행 (Eager execution) : 그래프 생성 없이 연산을 즉시 실행하는 명령형 프로그래밍 환경

그 다음 학습 과정을 정의할 때는 Gradient Tape 기능을 통해 자동 미분(automatic differentiation)을 수행한다.

그래디언트 값이 적용되고, 역전파 과정이 이루어질 때, 최종적으로 훈련 파라미터가 업데이트 된다.

모델의 훈련을 끝내고 나면 원했던 값들을 리턴 받을 수 있다.

@tf.function
def train_step(x, y):
     with tf.GradientTape() as tape:
          logits = model(x, training=True)
          loss_value = loss_fn(y, logits)
     grads = tape.gradient(loss_value, model.trainable_weights)
     optimizer.apply_gradients(zip(grads, model.trainable_weights))
     train_acc_metric.update_state(y, logits)
     return loss_value

파이토치에서 학습 루프를 정의하는 건 보다 간단하고 직관적이다. 변수를 생성하고 동적 그래프를 그때그때 정의하면서 모델을 학습할 수 있다. 데이터와 타겟을 디바이스(CPU/GPU)에 할당하고 순전파를 연산한다.

모델이 순전파(feed-forward) 연산을 마치고 나면, pytorch의 사전 정의된 개체들을 통해 역전파 과정을 수행할 수 있다. 그래디언트를 계산하고, 역전파 방법론을 적용함으로써 파라미터를 업데이트 한다.

for epoch in range(epochs):
     for batch, (data, target) in enumerate(train_loader):
          # cuda 파라미터 가져오기
          data = data.to(device=device)
          target = target.to(device=device)
          # 순전파
          score = model(data)
          loss = criterion(score, target)
          # 역전파
          optimizer.zero_grad()
          loss.backward()
          optimizer.step()

4. MNIST로 파이토치 이해하기

필요한 라이브러리를 불러온다

import torch
import torchvision
import torch.nn as nn
import torch.nn.functional as F
from torch.utils.data import DataLoader

import numpy as np
import matplotlib.pyplot as plt

디바이스 파라미터를 설정한다. 

device = torch.device('cuda' if torch.cuda.is_available() else cpu)

하이퍼파라미터를 세팅한다.

num_classes = 10
input_size = 784
batch_size = 64
lr = 0.0001
epochs = 3

텐서플로우처럼 파이토치도 MNIST 등 기본 데이터셋을 불러올 수 있다.

T = torchvision.transform.Compose([torchvision.transforms.ToTensor()])

X_train = torchvision.datasets.MNIST(root='/datasets', \
                                     train=True, \
                                     download=True, \
                                     transform=T)
train_loader = DataLoader(dataset=X_train, batch_size=batch_size, shuffle=True)

X_test = torchvision.datasets.MNIST(root='/datasets', \
                                     train=False, \
                                     download=True, \
                                     transform=T)
test_loader = DataLoader(dataset=X_test, batch_size=batch_size, shuffle=True)

“Linear” function 으로 정의되는 fully connected layer 를 선언할 것이다.

텐서플로우였다면 Dense function을 사용했을 거라는 점을 기억하자.

class neural_network(nn.Module):
     def __init__(self, input_size, num_classes):
          super(neural_network, self).__init__()
          self.fc1 = nn.Linear(in_features=input_size, out_features=50)
          self.fc2 = nn.Linear(in_features=50, out_features_num_classes)
          
     def forward(self, x):
          x = self.fc1(x)
          x = F.relu(x)
          x = self.fc2(x)
          return x

이제 loss 와 옵티마이저를 선택해보자.

학습에 있어서는, 순전파를 수행한 다음 최적의 가중치를 학습하기 위해 역전파를 적용할 것이다.

# 손실함수와 옵티마이저
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=lr)

# 훈련
for epoch in range(epochs):
     for batch, (data, target) in enumerate(train_loader):
          data = data.to(device=device)
          target = target.to(device=device)
          
          data = data.reshape(data.shape[0], -1)
          
          # 순전파
          score = model(data)
          loss = criterion(score, target)
          
          # 역전파
          optimizer.zero_grad()
          loss.backward()
          optimizer.step()

모델을 평가해보자.

def check_accuracy(loader, model):
    num_correct = 0
    num_samples = 0
    model.eval()

    with torch.no_grad():
        for x, y in loader:
            x = x.to(device=device)
            y = y.to(device=device)
            x = x.reshape(x.shape[0], -1)

            scores = model(x)
            _, predictions = scores.max(1)
            num_correct += (predictions == y).sum()
            num_samples += predictions.size(0)

        if num_samples == 60000:
            print(f"Train accuracy = {float(num_correct) / float(num_samples) * 100:.2f}")
        else:
            print(f"Test accuracy = {float(num_correct) / float(num_samples) * 100:.2f}")

    model.train()
    
check_accuracy(train_loader, model)
check_accuracy(test_loader, model)

5. 꼭 파이토치여야 할까?

5.1. 파이토치의 장점

1. 본질적으로 파이써닉하다

파이토치로 된 코드는 파이써닉하다. 즉, 절차적인 코딩 방식이(procedural coding) 파이썬 요소와 유사하다.

텐서플로우로 작업할 때는 코드가 다소 low-level에 있어 이해하기가 어렵다.

(이런 이유로 keras 같은 high-level API가 텐서플로우 2.0으로 통합되고 있다.)

파이토치의 기능들은 Numpy, Scipy, Cpython과 같은 다른 라이브러리와 함께 적용하기 좋다.

또 파이토치의 문법이나 응용 방식이 정통 파이썬 프로그래밍 방식과 매우 유사하기 때문에 학습 난이도가 낮다.

2. 문서화가 잘 되어 있고 커뮤니티가 잘 형성되어 있다

3. 동적 그래프

메모리를 미리 지정하기 어려울 때 동적으로 생성된 그래프를 유용하게 쓸 수 있다.

4. 많은 개발자들이 프로젝트에 파이토치를 활용하고 있다

5.2. 파이토치의 단점

1. 시각화 기술이 부족하다

텐서플로우의 경우 텐서보드(Tensorboard)라는 시각화 툴킷을 통해 학습 및 검증 정확도 및 loss, 모델 그래프, 히스토그램, 이미지 등 다양한 요소를 모니터링 할 수 있다. 파이토치에 Tensorboard를 활용하는 것도 방법이다.

2. 배포를 위해서는 API 서버가 요구된다

텐서플로우의 장점 중 하나가 프로덕션 툴이 다양하다는 것이다. production-ready 상태로 빌드되기 때문에 텐서플로우의 확장성이 크다.

inference나 학습된 모델 주기(lifetimes) 등을 다룰 수 있다.

오늘은 텐서플로우와 파이토치를 비교하며 대략적으로 파이토치가 어떤 프레임워크인지 살펴보았다.

다음 글에서는 파이토치의 모델 정의, 학습, 추론에 대해 자세하게 살펴보겠다.

[출처] https://woo-niverse.tistory.com/246

Loading

26 10월 2025

[기술 에세이] [기술 블로그] 개발은 나이와 함께 익어간다 

[기술 에세이] [기술 블로그] 개발은 나이와 함께 익어간다 

72P by xguru 11일전 | ★ favorite | 댓글 15개

아마존 CTO Werner Vogels 박사의 글

  • 이런 속삭임을 들었음. “이제 그도 나이가 들었는데, 누가 후임이 될까?”
    • 사람들이 진지하게 물음. “은퇴는 언제 하실 건가요?”
    • Amazon에서 거의 25년을 보냈고, 매년이 다르고 놀라웠던 시간들이었지만, 그는 여전히 학계를 떠나 Amazon에 합류하기로 했던 그날만큼 젊은 마음을 가지고 있음
  • 나이가 들어가는 개발자로서 좋은 점은, 이미 많은 문제를 직접 경험해봤다는 것
    • 젊은 개발자들이 오늘 마주하는 어려움들을 이전에도 겪었고, 비록 지금은 겉모습이 조금 달라 보일지라도 본질은 같음
    • 수많은 프로젝트를 거치며 실전 경험을 쌓았고, 실패도 셀 수 없이 많았음
    • 이제 머릿속 절반은 무엇이 현실적으로 작동하는지를 알고 있고, 그중 일부는 위험 신호를 감지하는 감각으로 훈련되어 있음
  • 남은 공간은 창의성을 위한 자리
    • 다양한 신호를 받아들이고, 정신적 모델을 세우며, 새롭고 독창적인 해결책을 찾는 일
    • 이것이야말로 개발자로서의 가장 큰 즐거움
    • 매일 무언가 새로운 것을 만들 수 있는 직업이 얼마나 될까?
    • 나는 이 사실을 결코 당연하게 여기지 않음
  • 나이 든 개발자로서, 당신은 이미 패턴이 반복되는 세상을 여러 번 보았음
    • 세상을 바꿀 것처럼 떠들던 회사들이 결국은 구멍 난 치즈 같은 결과를 내놓는 모습을 수없이 봄
  • 그리고 AI의 시대가 도래했음
    • 지난 15~20년 동안 우리가 사용해온 NLP, 음성인식, 번역, 이미지 인식, 추천 시스템, 사기 탐지 등과 같은 AI가 아님
      • Amazon.com을 지탱해온 기반 기술들이지만, 지금 이야기하는 것은 생성형 AI
      • 나이 든 개발자인 나에게도 이건 정말 흥미로운 변화로 느껴짐
    • 실험 속도가 엄청나게 빨라졌기 때문
      • 건강한 회의감(scepticism)을 가진 숙련된 빌더의 손에 들어가면, 이것은 매우 강력한 도구가 됨
      • 하지만 동시에 도전적이기도 함
      • 다른 기술들처럼 출시 전 교육이나 준비 기간이 없었기 때문
      • 마치 마법이 병에서 갑자기 튀어나오듯 세상에 퍼졌고, 모두가 예상치 못한 탓에 과열된 기대가 폭발함
    • 이 상황은 낯설게 느껴졌음
      • 왜냐하면 지금까지의 소프트웨어는 1년에 한 번 나오는 마이너 버전 업그레이드를 통해 진화했기 때문
      • Windows 3가 3.1이 되기까지 2년이 걸렸고, Mac OS X도 2001년부터 2019년까지 소수점 버전만 업데이트하다가 최근에야 매년 주요 버전이 바뀌기 시작했음
      • 그런데 지금은 매주 모델이 교체되고, 새로운 버전이 나올 때마다 리더보드 순위가 바뀌는 세상이 되었음
  • AWS는 언제나 B2B 기업이었음
    • 우리는 고객들이 자신의 고객을 위해 혁신할 수 있도록 기술의 빌딩 블록(S3, EC2, DynamoDB, Lambda, DSQL 등) 을 제공해왔음
    • 그런데 이 AI 열풍 속에서 갑자기 B2C 기업들과 비교되기 시작했음. 솔직히 답답했음
  • 하지만 경험은 방향을 알려줌
    • 우리는 본질로 돌아갔음
    • 기술(이번에는 모델)에 대한 접근을 대중화하고, 고객 선택권을 보장하며, 프라이버시와 보안을 최우선으로 두었음
    • 또한 안전과 컴플라이언스를 위한 가드레일을 제공하고, 자동 추론(automated reasoning) 을 통해 모델 오류 가능성을 줄였음
    • 이것이 수십 년 동안 반복되는 패턴 속에서 배운 교훈임
      — 무엇이 진짜로 작동하는지를 알고 있다는 것
  • 노련한 개발자는 매주 쏟아지는 새로운 모델 발표와 기능 추가 소식에도 조급해하지 않음
    • 이런 일은 수없이 봤음 = 새로운 기술, 같은 패턴
  • 지난 수십 년 동안 나이든 개발자는 아마 열 개가 넘는 프로그래밍 언어를 배우고, 수많은 오픈소스 라이브러리와 플랫폼을 경험했을 것임
    • 언제나 기술 트렌드를 관찰하고, 논문을 읽고, 새로운 방향을 공부하는 일을 즐겼음
    • 그것이 개발자의 재미였기 때문
    • 그래서 그의 회사가 생성형 AI에 적합한 문제를 다룰 준비가 되었을 때, 그는 이미 준비되어 있었음
    • 또한 Marc Brooker의 훌륭한 글 “LLM-driven development”를 읽었고, 그 조언을 따를 계획임
  • 내가 만나는 거의 모든 고객은 이렇게 물어봄 : “우리는 생성형 AI로 뭘 해야 할까요?”
    • 이 질문에 대한 최고의 답변은 우리의 똑똑한 과학자 Byron Cook의 말임 : “질문에 즉시 답변하지 못해 죄송한데, 왜 이런 질문을 하셨을까요?”
    • 고객의 90%는 생성형 AI가 자사 문제를 해결할 거라 믿어서 묻는 게 아니라, 단지 뒤처질까 봐 불안해서 묻는 것임
      • FOMO(Fear of Missing Out) 때문임
  • 그리고 노련한 개발자는 이럴 때 멈출 줄 앎. 잠시 멈춰서, 신중하게 생각함
    • 그는 젊은 개발자들에게 장단점을 공부하라고 격려하고, 경영진에게는 Jeff Lawson의 《Ask Your Developer》 같은 책을 읽으라고 권함
  • 그 다음엔, 늘 그래왔듯이 고객과 깊이 대화함
    • 그들의 도전 과제를 듣고, 문제를 탐색하고, 아키텍처와 마이그레이션, 도구를 제안함
    • 그리고 때로는 그 해답이 생성형 AI일 수도 있음
  • 하지만 나이 든 개발자로서, 당신은 이미 알고 있음

자, 이제, 만들어보세요!(Now, Go build!)

[출처] https://news.hada.io/topic?id=23667

Loading