<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>Hyun 블로그</title>
		<description>Hyun 블로그</description>		
		<link>http://corecode.pe.kr/</link>
		
			<item>
				<title>주간 테크/개발 뉴스 #2026 4/12 ~ 4/18</title>
				        
        <description>&lt;h2 id=&quot;이번-주-pick&quot;&gt;이번 주 pick!&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;/img/2026_04_18/vibecoding.png&quot; alt=&quot;importantWork&quot; style=&quot;display: block; margin: 0 auto; max-width: 250px; width: 100%; border: 1px solid #ccc; border-radius: 4px;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;출처: &lt;a href=&quot;https://reddit.com/r/ProgrammerHumor/comments/1sk0a4w/importantwork/&quot;&gt;r/ProgrammerHumor - importantWork&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;ai&quot;&gt;AI&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://dinobase.ai/?ref=console.dev&quot;&gt;Beta: Dinobase&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28650&quot;&gt;Is Your Site Agent-Ready? - 당신의 사이트는 에이전트에 대응하나요?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28649&quot;&gt;Show GN: Nilbox – API 토큰 노출 없이 OpenClaw를 실행하세요&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28641&quot;&gt;Claude 4.7 토크나이저 비용 측정 결과&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28640&quot;&gt;Anthropic, Claude Design 공개&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28635&quot;&gt;13시간 만에 €54,000 과금 폭증: API 제한 없는 Firebase 브라우저 키로 Gemini API 호출 발생&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28634&quot;&gt;Qwen3.6-35B-A3B가 Claude Opus 4.7보다 더 나은 펠리컨 이미지를 생성함&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3713&quot;&gt;“이걸 누가 관리하나요?” GEO 자동화가 필요한 이유&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3712&quot;&gt;16년 된 백준(BOJ)이 문을 닫습니다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3711&quot;&gt;왜 개인 위키는 실패할까? 안드레 카파시의 ‘LLM 위키’&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3710&quot;&gt;4계층 문서 체계로 만드는 AI Driven 쿠버네티스 운영 표준&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3705&quot;&gt;AI 에이전트가 슬랙을 떠난 이유: 웹으로 이사한 곰곰이&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=209428&quot;&gt;앤트로픽, 올인원 디자인 도구 ‘클로드 디자인’ 공개…어도비·캔바 위협&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=209415&quot;&gt;‘챗GPT’에 한글 문서 지원 추가…”공공기관 업무 활용 극대화”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=209384&quot;&gt;오픈AI, 생명과학 연구를 위한 AI 모델 ‘GPT-로절린드’ 출시&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=209371&quot;&gt;기업용 ‘클로드 오퍼스 4.7’ 출시…근소한 차로 정상 탈환&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=209325&quot;&gt;구글, 맥OS용 ‘제미나이’ 앱 출시…데스크톱 AI 앱 경쟁 합류&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=209332&quot;&gt;오픈AI, ‘하네스·샌드박스’ 포함한 에이전트 구축용 SDK 업데이트&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=209352&quot;&gt;앤트로픽, ‘클로드 코드’ 상시 실행용 반복 자동화 기능 ‘루틴’ 공개&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4159938/%eb%a9%80%ed%8b%b0-%ec%97%90%ec%9d%b4%ec%a0%84%ed%8a%b8-ai%ec%9d%98-%eb%b3%91%eb%aa%a9-%ec%97%90%ec%9d%b4%ec%a0%84%ed%8a%b8-%ec%95%84%eb%8b%8c-%ec%a1%b0%ec%a0%95-%ec%9d%b8%ed%94%84%eb%9d%bc.html&quot;&gt;멀티 에이전트 AI의 병목, “에이전트 아닌 조정 인프라”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4159930/ai-%ec%97%86%ec%9d%b4-%eb%b3%b4%eb%82%b8-%ec%9d%bc%ec%a3%bc%ec%9d%bc-%ec%98%a4%ed%9e%88%eb%a0%a4-%ec%a2%8b%ec%95%98%eb%8d%98-%ec%9d%b4%ec%9c%a0.html&quot;&gt;AI 없이 보낸 일주일 “오히려 좋았던” 이유&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4159358/cuda-20%eb%85%84-ai-%ed%98%81%eb%aa%85%ec%9d%84-%ec%84%a4%ea%b3%84%ed%95%9c-%ec%97%94%eb%b9%84%eb%94%94%ec%95%84%ec%9d%98-%ec%88%a8%ec%9d%80-%ec%97%94%ec%a7%84.html&quot;&gt;CUDA 20년, AI 혁명을 설계한 엔비디아의 숨은 엔진&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4158127/%ed%81%b4%eb%9d%bc%ec%9a%b0%eb%93%9c%ec%97%90-%eb%ac%b6%ec%9d%b8-%ec%9d%b8%ea%b3%b5%ec%a7%80%eb%8a%a5-%ec%9d%b4%ec%a0%9c-%ed%92%80%eb%a0%a4%eb%82%a0-%eb%95%8c.html&quot;&gt;클라우드에 묶인 인공지능, 이제 풀려날 때&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28629&quot;&gt;Show GN: 멀티 에이전트가 이제 탈춤을 춥니다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28622&quot;&gt;로컬 LLM 생태계에는 Ollama가 필요하지 않다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28620&quot;&gt;Zerobox - OpenAI Codex 런타임 기반의 경량 크로스 플랫폼 프로세스 샌드박싱 도구&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;backend&quot;&gt;Backend&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.fusejs.io/?ref=console.dev&quot;&gt;Tool: FuseJS&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28645&quot;&gt;Gemma Gem - 브라우저에서 Google Gemma 4 모델을 완전 온디바이스로 실행하는 Chrome 확장&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28644&quot;&gt;Postgres 큐를 건강하게 유지하기&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3702&quot;&gt;타입스크립트 제네릭, 실무에서 제대로 활용하기&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28624&quot;&gt;Darkbloom – 유휴 Mac을 활용한 개인용 AI 추론 네트워크&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;infracloud&quot;&gt;Infra/Cloud&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://obdev.at/products/littlesnitch-linux/index.html?ref=console.dev&quot;&gt;Tool: Little Snitch for Linux&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4157594/%ea%b0%9c%eb%b0%9c%ec%9e%90-%ec%a4%84%ec%9d%b4%ea%b3%a0-ai-%eb%8f%84%ec%9e%85-%ea%b8%b0%ec%88%a0-%eb%b6%80%ec%b1%84%ec%99%80-%eb%b9%84%ec%9a%a9-%ed%8f%ad%ec%a6%9d-%ec%9a%b0%eb%a0%a4%ed%95%b4.html&quot;&gt;개발자 줄이고 AI 도입…기술 부채와 비용 폭증 우려해야&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28626&quot;&gt;Show GN: sls — SSH 접속하면서 Docker 컨테이너까지 한 화면에서 관리하고 싶어서 만든 CLI&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;tools&quot;&gt;Tools&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28648&quot;&gt;미국 법안, 모든 기기에 온디바이스 연령 확인 의무화&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28630&quot;&gt;Show GN: for-real - GitHub 조직 통째로 날리고 만든 삭제 방지 크롬 익스텐션&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;github-trending&quot;&gt;GitHub Trending&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/forrestchang/andrej-karpathy-skills&quot;&gt;forrestchang/andrej-karpathy-skills&lt;/a&gt;&lt;br /&gt;Andrej Karpathy의 LLM 코딩 실수 관찰에서 도출된 Claude Code 행동 개선용 단일 CLAUDE.md 파일이다. Think Before Coding, Simplicity First, Surgical Changes, Goal-Driven Execution 네 가지 원칙으로 오버엔지니어링과 숨겨진 가정을 줄인다. Claude Code 플러그인 또는 프로젝트별 CLAUDE.md로 간편히 설치할 수 있다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/NousResearch/hermes-agent&quot;&gt;NousResearch/hermes-agent&lt;/a&gt;&lt;br /&gt;Nous Research가 공개한 self-improving AI 에이전트로, 사용 중 스킬을 자동 생성·개선하는 학습 루프를 내장했다. Telegram·Discord·Slack·WhatsApp·Signal·CLI 등 다양한 플랫폼에서 동작하며 OpenRouter, NVIDIA NIM, OpenAI 등 원하는 모델을 자유롭게 바꿀 수 있다. $5 VPS부터 GPU 클러스터, 서버리스 환경까지 어디서나 구동 가능하다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/shiyu-coder/Kronos&quot;&gt;shiyu-coder/Kronos&lt;/a&gt;&lt;br /&gt;45개 이상 글로벌 거래소 데이터로 사전학습된 금융 캔들스틱(K-line)용 최초의 오픈소스 foundation model이다. K-line을 계층적 이산 토큰으로 양자화하는 특수 tokenizer와 autoregressive Transformer를 결합한 2단계 구조를 사용한다. AAAI 2026에 채택되었고 mini·small·base 모델이 Hugging Face에 공개되어 있다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/multica-ai/multica&quot;&gt;multica-ai/multica&lt;/a&gt;&lt;br /&gt;코딩 에이전트를 실제 팀원처럼 운영할 수 있는 오픈소스 managed agents 플랫폼이다. 이슈를 에이전트에게 할당하면 자동으로 작업을 진행하고 보드에서 진행 상황을 추적하며 재사용 가능한 스킬이 누적된다. Claude Code, Codex, OpenClaw, OpenCode, Hermes, Gemini, Pi, Cursor Agent 등 다양한 CLI를 지원한다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/microsoft/markitdown&quot;&gt;microsoft/markitdown&lt;/a&gt;&lt;br /&gt;PDF, PowerPoint, Word, Excel, 이미지, 오디오, HTML 등 다양한 파일을 LLM 친화적인 Markdown으로 변환하는 Python 유틸리티다. 제목, 리스트, 테이블 같은 문서 구조를 보존해 텍스트 분석 파이프라인에 바로 투입할 수 있다. Claude Desktop 같은 LLM 앱과 연동되는 MCP 서버도 함께 제공한다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/OpenBMB/VoxCPM&quot;&gt;OpenBMB/VoxCPM&lt;/a&gt;&lt;br /&gt;이산 토크나이저 없이 연속 음성 표현을 end-to-end diffusion autoregressive 구조로 생성하는 TTS 시스템이다. 최신 VoxCPM2는 2B 파라미터와 30개 언어를 지원하고, 자연어 설명만으로 새 목소리를 만드는 Voice Design, 제어 가능한 Voice Cloning, 48kHz 스튜디오 품질 오디오 출력을 제공한다. MiniCPM-4 백본 위에 구축되었고 Apache-2.0 라이선스로 상업 이용이 가능하다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/coleam00/Archon&quot;&gt;coleam00/Archon&lt;/a&gt;&lt;br /&gt;AI 코딩 에이전트를 위한 워크플로우 엔진으로, planning·implementation·validation·review·PR 생성 같은 개발 프로세스를 YAML 워크플로우로 정의해 결정론적으로 반복 실행한다. 각 실행은 독립된 git worktree에서 돌아가 병렬 작업이 충돌 없이 진행되며 AI 노드와 bash·테스트 같은 결정론적 노드를 조합할 수 있다. Dockerfile이 인프라에, GitHub Actions가 CI/CD에 했던 역할을 AI 코딩 영역에 적용한 시도다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/thedotmack/claude-mem&quot;&gt;thedotmack/claude-mem&lt;/a&gt;&lt;br /&gt;Claude Code 세션 간 컨텍스트를 자동으로 이어주는 persistent memory 플러그인이다. 도구 사용 관찰을 캡처한 뒤 agent-sdk로 의미 요약을 생성하고 이후 세션에 관련 컨텍스트를 주입한다. 로컬 웹 뷰어, mem-search 스킬, Gemini CLI·OpenCode·OpenClaw 통합 등 다양한 검색·관리 도구를 제공한다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/virattt/ai-hedge-fund&quot;&gt;virattt/ai-hedge-fund&lt;/a&gt;&lt;br /&gt;Warren Buffett, Cathie Wood, Michael Burry 등 유명 투자자 스타일을 흉내내는 19개 AI 에이전트가 협업하는 AI 헤지펀드 프로토타입이다. Valuation·Sentiment·Fundamentals·Technicals 에이전트의 신호를 Risk Manager와 Portfolio Manager가 종합해 가상의 거래 결정을 내린다. OpenAI, Anthropic, Groq, DeepSeek, Ollama 등 다양한 LLM을 지원하며 실제 거래는 수행하지 않는 교육용 프로젝트다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/addyosmani/agent-skills&quot;&gt;addyosmani/agent-skills&lt;/a&gt;&lt;br /&gt;AI 코딩 에이전트가 시니어 엔지니어 수준의 워크플로우·품질 게이트·베스트 프랙티스를 따르도록 설계된 프로덕션급 스킬 모음이다. spec → plan → build → test → review → ship 개발 라이프사이클에 매핑된 7개 슬래시 명령과 20개 스킬을 제공한다. Claude Code, Cursor, Gemini CLI, Windsurf, OpenCode, GitHub Copilot, Kiro 등 다양한 에이전트 환경에서 사용 가능하다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/ericcurtin&quot;&gt;GitHub Developer: Eric Curtin (@ericcurtin)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/felixrieseberg&quot;&gt;GitHub Developer: Felix Rieseberg (@felixrieseberg)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/allenhutchison&quot;&gt;GitHub Developer: Allen Hutchison (@allenhutchison)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/Classic298&quot;&gt;GitHub Developer: Classic298 (@Classic298)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/danieldk&quot;&gt;GitHub Developer: Daniël de Kok (@danieldk)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/mrgoonie&quot;&gt;GitHub Developer: Duy /zuey/ (@mrgoonie)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/penso&quot;&gt;GitHub Developer: Fabien Penso (@penso)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/bradfitz&quot;&gt;GitHub Developer: Brad Fitzpatrick (@bradfitz)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/shahednasser&quot;&gt;GitHub Developer: Shahed Nasser (@shahednasser)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/zhukunpenglinyutong&quot;&gt;GitHub Developer: 朱昆鹏 (@zhukunpenglinyutong)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;etc&quot;&gt;Etc&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://solod.dev?ref=console.dev&quot;&gt;Beta: Solod&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://plainframework.com?ref=console.dev&quot;&gt;Beta: Plain&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3714&quot;&gt;클로드 코드 제대로 써보신 분! &amp;lt;클코나잇 2&amp;gt; 발표자 모집&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3709&quot;&gt;AI 에이전트 많이 만든다고 AX가 아니다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3708&quot;&gt;자바 vs. 파이썬: 더 나은 에이전트 개발 언어는?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3707&quot;&gt;AI, 개발 말고 요구사항부터 써야 하는 이유&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=209432&quot;&gt;‘바이브 코딩’ 커서, 73조 기업 가치 평가로 AI 스타트업 최상위권 도약&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=209390&quot;&gt;‘주차타워부터 AI 버스’까지… 목포, 스마트 교통 혁신 중&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=209431&quot;&gt;세레브라스, 나스닥 상장 재추진…오픈AI 파트너십이 발판&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4159967/%ec%82%ac%ec%9d%b4%eb%b2%84-%ec%9c%84%ed%98%91-%ed%83%90%ec%a7%80%ec%9d%98-%ec%83%88-%eb%ac%b4%ea%b8%b0%eb%a1%9c-%eb%96%a0%ec%98%a4%eb%a5%b8-ai-soc-%eb%b2%88%ec%95%84%ec%9b%83%ea%b9%8c%ec%a7%80.html&quot;&gt;사이버 위협 탐지의 새 무기로 떠오른 AI, SOC 번아웃까지 잡는다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4159953/%ec%9c%88%eb%8f%84%ec%9a%b0-%eb%a6%ac%ec%bd%9c-%eb%b3%b4%ec%95%88-%ea%b0%9c%ed%8e%b8%ec%97%90%eb%8f%84-%eb%8d%b0%ec%9d%b4%ed%84%b0-%ed%83%88%ec%b7%a8-%ea%b0%80%eb%8a%a5%ec%97%b0%ea%b5%ac.html&quot;&gt;윈도우 리콜 보안 개편에도 데이터 탈취 가능…연구자 ‘설계 결함’ 지적&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4159404/%eb%a7%a5-%ec%a4%91%ea%b3%a0-%ec%8b%9c%ec%9e%a5%eb%8f%84-%eb%9c%a8%ea%b2%81%eb%8b%a4-%ea%b8%b0%ec%97%85%ec%97%90%ea%b9%8c%ec%a7%80-%eb%b2%88%ec%a7%84-%ec%95%a0%ed%94%8c-%ed%95%98%eb%93%9c%ec%9b%a8.html&quot;&gt;“맥 중고 시장도 뜨겁다” 기업에까지 번진 애플 하드웨어 재활용 열풍&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4159396/usb-%eb%93%9c%eb%9d%bc%ec%9d%b4%eb%b8%8c%c2%b7sd%ec%b9%b4%eb%93%9c%eb%8f%84-%ea%b0%80%ea%b2%a9-%ed%8f%ad%eb%93%b1%ec%a0%80%ec%9e%a5-%eb%a7%a4%ec%b2%b4-%ea%b3%b5%ea%b8%89%eb%82%9c-%ec%a0%84.html&quot;&gt;USB 드라이브·SD카드도 가격 폭등…저장 매체 공급난 전방위 확산&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4158789/%ec%a6%89%ec%84%9d-%eb%a6%ac%eb%b7%b0-%ea%b2%80%ec%83%89-%eb%8f%84%ea%b5%ac%eb%b3%b4%eb%8b%a4-%ec%a0%9c%eb%af%b8%eb%82%98%ec%9d%b4-%ed%99%95%ec%9e%a5-%ed%94%84%eb%a1%9c%ea%b7%b8%eb%9e%a8%ec%97%90.html&quot;&gt;검색 도구보다 제미나이 확장 프로그램에 가까운 구글 데스크톱 앱&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2026/04/18/weekly-dev-links-2026w16/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2026/04/18/weekly-dev-links-2026w16/</guid>
			</item>
		
			<item>
				<title>주간 테크/개발 뉴스 #2026 4/5 ~ 4/11</title>
				        
        <description>&lt;h2 id=&quot;ai&quot;&gt;AI&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=209027&quot;&gt;앤트로픽, 폭발적 성장세에 지분 품귀… 직원들 “IPO까지 안 팔아”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208904&quot;&gt;앤트로픽, 역대 최강 ‘클로드 미소스’ 공개…“일반 출시는 없어”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208924&quot;&gt;엔비디아도 ‘KV 캐시’ 해결… ‘트라이어텐션’으로 메모리 10배 절감&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/GoogleCloudPlatform/scion?ref=console.dev&quot;&gt;Beta: Scion&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28410&quot;&gt;Claude Code /Ultraplan : 클라우드 기반 계획 수립 도구&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28406&quot;&gt;일리노이주 AI 책임 제한 법안에 대한 OpenAI의 지지&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28404&quot;&gt;나는 여전히 Skills보다 MCP를 선호한다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28399&quot;&gt;multica - 코딩 에이전트를 실제 팀원으로 운영하는 관리형 에이전트 플랫폼&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28396&quot;&gt;월 100달러 Claude Code 예산을 Zed와 OpenRouter로 재배분하기&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28388&quot;&gt;Show GN: Advisor Opus — Anthropic의 Advisor Strategy를 Claude Code 플러그인으로 구현&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3703&quot;&gt;엉망인 코드로 시장을 이긴 Anthropic의 방식&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3700&quot;&gt;한국인의, 한국인을 위한 스킬 모음집 (Feat. 케이-스킬)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3698&quot;&gt;살아남기 위해 우리가 버려야 하는 것들: Unlearn&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3697&quot;&gt;반복적인 SQL 업무를 자동화하는 AI 에이전트 ‘곰곰이’&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3696&quot;&gt;Claude Code로 코드 한 줄 없이 마케팅팀을 만드는 법&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=209110&quot;&gt;코어위브, 앤트로픽과 AI 클라우드 계약 체결로 주가 급등&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=209108&quot;&gt;미국 정부, 월가 은행에 ‘미소스’ 보안 테스트 촉구…앤트로픽과도 논의&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=209104&quot;&gt;앤트로픽, ‘클로드 코워크’ 기능 강화하고 정식 서비스 시작&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=209092&quot;&gt;플로리다주, ‘챗GPT’ 총기 사건 연루 혐의로 오픈AI 조사 착수&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=209061&quot;&gt;[양현상 칼럼] AI와 에너지의 융합, 미래 산업의 패권을 가른다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=209048&quot;&gt;오픈AI, 월 100달러 ‘프로’ 요금제 출시…앤트로픽과 ‘코딩 전쟁’ 선언&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=209045&quot;&gt;“막 시작된 피지컬 AI, 데이터가 핵심”…국내 AI 리더들 실전 전략 공개&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4156101/ai%ea%b0%80-%eb%a7%8c%eb%93%a0-%eb%b9%84%eb%b0%80%eb%b2%88%ed%98%b8-%ec%9d%98%ec%99%b8%eb%a1%9c-%eb%9a%ab%ea%b8%b0-%ec%89%bd%eb%8b%a4.html&quot;&gt;AI가 만든 비밀번호, 의외로 뚫기 쉽다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4155361/llm-%eb%8f%84%ec%9e%85-%ec%a0%84-%ec%b2%b4%ed%81%ac%eb%a6%ac%ec%8a%a4%ed%8a%b8-27%ea%b0%80%ec%a7%80.html&quot;&gt;LLM 도입 전 체크리스트 27가지&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4154689/%ec%98%a4%ed%94%88%ec%86%8c%ec%8a%a4-%ea%b2%ac%ec%a0%9c%ec%9d%b8%ea%b0%80-%ec%9a%a9%eb%9f%89-%ed%95%9c%ea%b3%84%ec%9d%b8%ea%b0%80-%ec%95%a4%ed%8a%b8%eb%a1%9c%ed%94%bd-%ec%98%a4%ed%94%88%ed%81%b4.html&quot;&gt;“오픈소스 견제인가, 용량 한계인가” 앤트로픽, 오픈클로 차단에 오픈소스 커뮤니티 반발&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28387&quot;&gt;Show GN: WaitforAI – AI 응답 대기 시간에 미니게임·뉴스·퀴즈를 즐기는 크롬 익스텐션&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28386&quot;&gt;Claude가 발화자를 혼동하는 버그&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28380&quot;&gt;Show GN: 지식 검증과 캐릭터 성장을 결합한 새로운 집단지성 커뮤니티 Crowdians를 소개합니다.&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208829&quot;&gt;“직원 2명이 AI로 매출 2.7조”…‘AI 1인 유니콘’ 현실화되나&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;backend&quot;&gt;Backend&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://skir.build/?ref=console.dev&quot;&gt;Tool: Skir&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://atomicapp.ai/?ref=console.dev&quot;&gt;Tool: Atomic&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28413&quot;&gt;모든 Firefox 확장 프로그램 설치&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28391&quot;&gt;Show GN: DecoyDuck - 노드 기반 비주얼 Rest API 워크플로우 클라이언트&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4155368/%eb%b6%80%ed%92%88-%ea%b0%80%ea%b2%a9-%ea%b8%89%eb%93%b1-%ec%86%8d-%ec%95%a0%ed%94%8c-%eb%a7%a5-%eb%af%b8%ea%b5%ad-%ea%b8%b0%ec%97%85-%ec%8b%9c%ec%9e%a5%ec%84%9c-%ec%98%81%ed%96%a5%eb%a0%a5-%ed%99%95.html&quot;&gt;부품 가격 급등 속 애플 맥, 미국 기업 시장서 영향력 확대&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28378&quot;&gt;Shopify AI Toolkit - 클로드 코드/코덱스로 스토어를 관리하세요&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;infracloud&quot;&gt;Infra/Cloud&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28403&quot;&gt;프랑스, 미국 기술 의존 줄이기 위해 Windows 대신 Linux로 전환&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=209081&quot;&gt;아마존 “AI 관련 매출 22조 달해…295조 투자도 매출로 돌아올 것”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4156953/saas-%eb%8d%b0%eb%b8%8c%ec%98%b5%ec%8a%a4%ec%97%90%ec%84%9c-%eb%b0%b0%ec%9a%b0%eb%8a%94-%ea%b8%b0%ec%97%85-it-%ed%9a%8c%eb%b3%b5%ed%83%84%eb%a0%a5%ec%84%b1-%ec%a0%84%eb%9e%b5.html&quot;&gt;SaaS 데브옵스에서 배우는 기업 IT 회복탄력성 전략&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;tools&quot;&gt;Tools&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3692&quot;&gt;“오늘 뭐부터 하지?” AI 비서 에이전트 만들어봤습니다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=209093&quot;&gt;알리바바, 새로운 AI 영상 모델로 ‘시댄스’ 제치고 벤치마크 1위 등극&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28385&quot;&gt;Show GN: awake: AI 돌려도 노트북 덮고 회의실 갈 수 있게 해주는 CLI&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;github-trending&quot;&gt;GitHub Trending&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/HKUDS/DeepTutor&quot;&gt;HKUDS/DeepTutor&lt;/a&gt;&lt;br /&gt;DeepTutor는 PDF/Markdown 문서를 RAG 기반 지식 허브로 구축하고, Chat·Deep Solve·Quiz·Deep Research·Math Animator 등 5가지 모드를 하나의 스레드에서 제공하는 AI 개인 튜터링 플랫폼이다. 자율적으로 기억·학습·진화하는 TutorBot, AI Co-Writer, Guided Learning 등 에이전트 네이티브 아키텍처를 기반으로 개인화된 학습 경험을 제공하며, Python/Next.js로 구성된 CLI와 SDK까지 지원해 AI 파이프라인에 통합하기 쉽다. 출시 39일 만에 GitHub 10k 스타를 달성할 만큼 커뮤니티 반응이 폭발적이며, Apache-2.0…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/NousResearch/hermes-agent&quot;&gt;NousResearch/hermes-agent&lt;/a&gt;&lt;br /&gt;Hermes Agent는 Nous Research가 개발한 자가 개선형 AI 에이전트로, 경험에서 skill을 생성하고 세션 간 사용자 모델링(Honcho 기반)과 FTS5 대화 검색을 통해 지속적으로 학습하는 closed learning loop가 핵심 특징이다. OpenRouter, OpenAI 등 200개 이상의 모델을 코드 변경 없이 전환할 수 있으며, Telegram/Discord/Slack 등 다중 플랫폼 메시징 게이트웨이와 Docker/SSH/Modal 등 6가지 터미널 백엔드를 지원해 $5 VPS부터 GPU 클러스터까지 어디서나 실행 가능하다. 병렬 서브에이전트 spawn, cron 스케줄러, 40개…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/google-ai-edge/gallery&quot;&gt;google-ai-edge/gallery&lt;/a&gt;&lt;br /&gt;Google AI Edge Gallery는 Gemma 4를 포함한 오픈소스 LLM을 Android/iOS 기기에서 완전 오프라인으로 실행할 수 있는 앱으로, 인터넷 연결 없이 완전한 프라이버시를 보장하며 온디바이스 AI를 체험할 수 있다. AI 채팅, 이미지 분석(Ask Image), 음성 전사(Audio Scribe), Agent Skills 등 다양한 멀티모달 기능을 제공하며, LiteRT 런타임과 Hugging Face 연동을 통해 커스텀 모델도 직접 로드하고 벤치마크할 수 있다. 모바일에서 최신 생성형 AI를 직접 평가·실험할 수 있는 샌드박스 플랫폼으로, 온디바이스 AI의 실용적 가능성을 탐색하려는 개발자와…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/multica-ai/multica&quot;&gt;multica-ai/multica&lt;/a&gt;&lt;br /&gt;Multica는 Claude Code, Codex, OpenClaw, OpenCode 등 코딩 에이전트를 실제 팀원처럼 관리할 수 있는 오픈소스 플랫폼으로, 이슈 할당·진행 상황 추적·자율 실행을 지원한다. Next.js 프론트엔드, Go 백엔드, PostgreSQL(pgvector) 구조로 설계되어 셀프호스팅 또는 클라우드로 운영 가능하며, WebSocket 기반 실시간 모니터링과 멀티 워크스페이스를 제공한다. 반복 작업을 재사용 가능한 skill로 축적해 팀의 역량을 복리로 키울 수 있다는 점에서 AI 에이전트 협업 인프라로 주목할 만하다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/forrestchang/andrej-karpathy-skills&quot;&gt;forrestchang/andrej-karpathy-skills&lt;/a&gt;&lt;br /&gt;Andrej Karpathy가 지적한 LLM 코딩 문제점(무단 가정, 과도한 복잡화, 불필요한 코드 수정)을 해결하기 위해 설계된 단일 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CLAUDE.md&lt;/code&gt; 파일 프로젝트다. &lt;strong&gt;Think Before Coding&lt;/strong&gt;, &lt;strong&gt;Simplicity First&lt;/strong&gt;, &lt;strong&gt;Surgical Changes&lt;/strong&gt;, &lt;strong&gt;Goal-Driven Execution&lt;/strong&gt; 네 가지 원칙을 담고 있으며, Claude Code의 동작을 개선해 더 명확하고 최소한의 코드 변경을 유도한다. Claude Code 플러그인 또는 프로젝트별 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CLAUDE.md&lt;/code&gt;로 간단히 적용할 수 있어, AI 코딩 어시스턴트를 실무에서 활용하는 개발자라면 주목할 만한 실용적…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/google-ai-edge/LiteRT-LM&quot;&gt;google-ai-edge/LiteRT-LM&lt;/a&gt;&lt;br /&gt;Google가 개발한 LiteRT-LM은 Android, iOS, 데스크톱, Raspberry Pi 등 엣지 디바이스에서 LLM을 GPU/NPU 가속으로 고성능 실행할 수 있는 오픈소스 추론 프레임워크다. Gemma, Llama, Phi-4, Qwen 등 주요 모델을 지원하며, 멀티모달 입력과 function calling 기반 에이전틱 워크플로우까지 제공한다. Chrome, Chromebook Plus, Pixel Watch 등 Google 실제 제품에 이미 탑재된 프로덕션급 솔루션으로, 클라우드 의존 없이 온디바이스 GenAI를 구현할 수 있다는 점에서 주목할 만하다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/NVIDIA/personaplex&quot;&gt;NVIDIA/personaplex&lt;/a&gt;&lt;br /&gt;PersonaPlex는 NVIDIA가 공개한 실시간 full-duplex speech-to-speech 대화 모델로, 텍스트 기반 role prompt와 audio 기반 voice conditioning을 통해 일관된 페르소나로 자연스러운 저지연 음성 대화를 생성한다. Moshi 아키텍처를 기반으로 하며, 합성 및 실제 대화 데이터로 학습해 고객 서비스, 일상 대화 등 다양한 역할을 지원한다. 사전 패키징된 다양한 voice embedding과 함께 오픈 웨이트로 공개되어 커스텀 AI 음성 에이전트 개발에 활용 가능하다는 점이 주목할 만하다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/microsoft/markitdown&quot;&gt;microsoft/markitdown&lt;/a&gt;&lt;br /&gt;Microsoft가 개발한 &lt;strong&gt;MarkItDown&lt;/strong&gt;은 PDF, Word, Excel, PowerPoint, 이미지, 오디오, YouTube URL 등 다양한 파일 포맷을 LLM 처리에 최적화된 Markdown으로 변환해주는 Python 라이브러리다. 단순 텍스트 추출이 아닌 제목, 목록, 표, 링크 등 문서 구조를 보존하며, LLM이 Markdown을 네이티브로 이해하는 특성을 활용해 토큰 효율도 높다. MCP(Model Context Protocol) 서버 지원과 플러그인 시스템, Azure Document Intelligence 연동 등 LLM 파이프라인과의 통합을 강하게 의식한 설계가 특징이다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/siddharthvaddem/openscreen&quot;&gt;siddharthvaddem/openscreen&lt;/a&gt;&lt;br /&gt;Screen Studio의 유료 대안으로 출시된 무료 오픈소스 화면 녹화 편집 앱으로, Electron + React + PixiJS 기반으로 제작되어 macOS/Windows/Linux를 모두 지원한다. 줌 효과, 모션 블러, 어노테이션, 트림, 속도 조절, 커스텀 배경 등 제품 데모 제작에 필요한 핵심 기능을 갖추고 있으며, 개인 및 상업적 용도 모두 완전 무료로 사용 가능하다. 월 $29의 Screen Studio를 대체할 수 없지만, 기본 기능만 필요한 사용자에게 충분한 선택지를 제공한다는 점에서 주목할 만하다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/TheCraigHewitt/seomachine&quot;&gt;TheCraigHewitt/seomachine&lt;/a&gt;&lt;br /&gt;SEO Machine은 Claude Code 기반의 SEO 최적화 블로그 콘텐츠 제작 워크스페이스로, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/research&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/write&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/optimize&lt;/code&gt; 등 다양한 커스텀 커맨드와 전문 에이전트를 통해 리서치부터 발행까지의 콘텐츠 파이프라인을 자동화한다. Google Analytics 4, Google Search Console, DataForSEO 등 실시간 데이터 연동과 NLP 기반 SEO 품질 분석(0-100 점수), 26가지 마케팅 스킬을 내장해 단순 글쓰기 도구를 넘어 데이터 드리븐 콘텐츠 전략 도구로 활용할 수 있다. Claude Code의 에이전트 확장성을 실제 마케팅 워크플로우에 접목한 실용적…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/MervinPraison&quot;&gt;GitHub Developer: Mervin Praison (@MervinPraison)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/ranaroussi&quot;&gt;GitHub Developer: Ran Aroussi (@ranaroussi)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/vkehfdl1&quot;&gt;GitHub Developer: Jeffrey (Dongkyu) Kim (@vkehfdl1)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/1c7&quot;&gt;GitHub Developer: 郑诚 (Cheng Zheng) (@1c7)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/njbrake&quot;&gt;GitHub Developer: Nathan Brake (@njbrake)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/ascorbic&quot;&gt;GitHub Developer: Matt Kane (@ascorbic)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/phodal&quot;&gt;GitHub Developer: Fengda Huang (@phodal)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/frankbria&quot;&gt;GitHub Developer: Frank Bria (@frankbria)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/zeux&quot;&gt;GitHub Developer: Arseny Kapoulkine (@zeux)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/michaelneale&quot;&gt;GitHub Developer: Michael Neale (@michaelneale)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;etc&quot;&gt;Etc&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/lalitMaganti/syntaqlite?ref=console.dev&quot;&gt;Beta: syntaqlite&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/linebender/xilem?ref=console.dev&quot;&gt;Beta: Xilem&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3701&quot;&gt;시니어를 넘어 ‘백수저’ 리드 개발자로&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3699&quot;&gt;새로 출시한 이 기능은 DAU 얼마짜리 기능일까?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3695&quot;&gt;콘텐츠 AX, ‘프롬프트’ 말고 ‘파일’을 보세요: 콘텐츠 AX 실험기 ②&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3694&quot;&gt;AI로 프로젝트 10개 만든 개발자가 서류에서 떨어지는 이유&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4156945/%ec%9d%8c%ec%84%b1-ai-%ec%97%90%ec%9d%b4%ec%a0%84%ed%8a%b8-%ec%99%9c-%ed%8c%8c%ec%9d%bc%eb%9f%bf-%eb%8b%a8%ea%b3%84%eb%a5%bc-%eb%84%98%ec%a7%80-%eb%aa%bb%ed%95%98%eb%82%98.html&quot;&gt;음성 AI 에이전트, 왜 파일럿 단계를 넘지 못하나&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4156131/%ec%95%84%ec%9d%b4%ed%8f%b0-%ed%8f%b4%eb%93%9c-%ec%a7%80%ec%97%b0%ec%84%a4-%eb%94%9b%ea%b3%a0-%ea%b0%80%ec%9d%84-%ec%b6%9c%ec%8b%9c-%ec%98%88%ec%a0%95%eb%8c%80%eb%a1%9c-%eb%b8%94%eb%a3%b8.html&quot;&gt;아이폰 폴드, 지연설 딛고 가을 출시 ‘예정대로’…블룸버그&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Sat, 11 Apr 2026 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2026/04/11/weekly-dev-links-2026w15/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2026/04/11/weekly-dev-links-2026w15/</guid>
			</item>
		
			<item>
				<title>주간 테크/개발 뉴스 #2026 3/29 ~ 4/4</title>
				        
        <description>&lt;h2 id=&quot;ai&quot;&gt;AI&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28080&quot;&gt;Claude Code (유출본) 소스 코드 분석서&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28061&quot;&gt;claw-code - Claude Code 유출 소스 기반 Python 클린룸 재작성 프로젝트&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/reyavir/hierarchical-context-compressor?ref=console.dev&quot;&gt;Beta: hcc&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://agentne.ws?ref=console.dev&quot;&gt;Beta: agentnews&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.agentsh.org?ref=console.dev&quot;&gt;Beta: agentsh&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28197&quot;&gt;OpenAI, 미디어 기업 TBPN 인수&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28190&quot;&gt;Claude, 이제 OpenClaw 같은 써드파티에서 구독 모델 사용 불가&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28188&quot;&gt;Gemma 4 비주얼 가이드&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28178&quot;&gt;apfel - Mac에 이미 내장된 무료 AI를 활용하게 해주는 도구&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28171&quot;&gt;PyPI 보안팀 공식 공급망 공격 사고 보고서: LiteLLM·Telnyx 악성 패키지 사건 그리고 방어하기&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3690&quot;&gt;Claude Code를 만든 Boris Cherny가 직접 추천한 기능 15가지&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3688&quot;&gt;문돌이 PM이 만든 AI 세션에 대기자 200명이 몰린 이유&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3685&quot;&gt;AI가 UX를 설계하는 방식: 화면보다 흐름이 먼저인 ‘Figr’&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3681&quot;&gt;소프트웨어의 유튜브 모멘트: 이제 누구나 제품을 만든다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208809&quot;&gt;브록먼 오픈AI 사장 “차세대 모델 ‘스퍼드’로 AGI 가시권 확보”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208782&quot;&gt;뉴질랜드 스루라인, 오픈AI·앤트로픽의 위기 대응 업체로 주목&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208762&quot;&gt;앤트로픽 유출 파일서 AI를 위한 OS ‘콘웨이’ 개발 확인&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4154104/ai-%ea%b3%b5%ec%a0%95%ec%84%b1-%ec%95%8c%ea%b3%a0%eb%a6%ac%ec%a6%98-%ec%95%84%eb%8b%8c-%eb%8d%b0%ec%9d%b4%ed%84%b0-%ec%8b%a0%eb%a2%b0-%ec%a0%90%ec%88%98-%ed%94%84%eb%a0%88%ec%9e%84%ec%9b%8c%ed%81%ac.html&quot;&gt;AI 공정성, 알고리즘 아닌 데이터 신뢰 점수 프레임워크가 결정한다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4152843/ai-%ec%97%90%ec%9d%b4%ec%a0%84%ed%8a%b8%ec%9d%98-%ec%bd%94%eb%93%9c-%ec%8b%a4%ed%96%89-%ea%b6%8c%ed%95%9c%ec%9d%b4-%eb%b6%80%eb%a5%b8-%eb%b3%b4%ec%95%88-%ec%82%ac%ea%b3%a0%ec%98%a4%ed%94%88ai.html&quot;&gt;AI 에이전트의 코드 실행 권한이 부른 보안 사고…오픈AI 취약점 2건 패치&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4152201/%ea%b8%b0%ec%97%85-ai-%eb%8f%84%ec%9e%85%ec%9d%98-%eb%83%89%ed%98%b9%ed%95%a0-%eb%a7%8c%ed%81%bc-%eb%b6%88%ed%8f%89%eb%93%b1%ed%95%9c-%ed%98%84%ec%8b%a4.html&quot;&gt;기업 AI 도입의 냉혹할 만큼 불평등한 현실&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4152197/%eb%b8%94%eb%a3%a8%ec%8a%a4%ec%b9%b4%ec%9d%b4-ai-%ea%b8%b0%eb%b0%98-%ec%86%8c%ec%85%9c-%ed%94%bc%eb%93%9c-%eb%b9%8c%eb%8d%94-%ec%95%a0%ed%8b%b0-%ea%b3%b5%ea%b0%9c%ec%95%8c%ea%b3%a0.html&quot;&gt;블루스카이, AI 기반 소셜 피드 빌더 ‘애티’ 공개…”알고리즘 대신 내가 직접 설계”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4151603/%ec%88%98%ec%a7%91-%ec%95%84%eb%8b%8c-%ec%97%b0%ea%b2%b0%ec%9d%b4-%ec%8a%b9%ed%8c%a8-%ea%b0%80%eb%a5%b8%eb%8b%a4%eb%94%94%eb%85%b8%eb%8f%84%ea%b0%80.html&quot;&gt;‘수집’ 아닌 ‘연결’이 승패 가른다…디노도가 제안하는 AI 시대의 데이터 전략&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;backend&quot;&gt;Backend&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://semiotic.nteract.io/?ref=console.dev&quot;&gt;Tool: Semiotic&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208804&quot;&gt;아르시, 추론 모델 ‘트리니티-라지-싱킹’ 출시…에이전트 성능은 ‘클로드급’&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4152940/%ea%b4%80%ec%b0%b0%ea%b0%80%eb%8a%a5%ec%84%b1-%ed%91%9c%ec%a4%80-%ec%a7%80%ea%b8%88-%ec%95%88-%ec%84%b8%ec%9a%b0%eb%a9%b4-ai-%ea%b8%b0%ec%88%a0-%eb%b6%80%ec%b1%84%ea%b0%80-%eb%aa%b0%eb%a0%a4.html&quot;&gt;‘관찰가능성 표준’ 지금 안 세우면, AI 기술 부채가 몰려온다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;infracloud&quot;&gt;Infra/Cloud&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://nono.sh/?ref=console.dev&quot;&gt;Tool: nono&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;tools&quot;&gt;Tools&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28183&quot;&gt;Optio - AI 코딩 에이전트를 위한 워크플로 오케스트레이터&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28176&quot;&gt;Show GN: mrg - macOS에서 자모 분리 현상을 해결하고 잡다한 메타데이터 파일들을 제거하는 툴&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3687&quot;&gt;왜 우리는 아직도 AI에게 일을 제대로 못 시킬까?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208806&quot;&gt;알리바바, 차세대 영상 모델 ‘완2.7-비디오’ 공개&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4153433/%ed%94%bc%ec%a7%80%ec%bb%ac-ai-%ea%b8%b0%eb%8c%80%eb%8a%94-%ed%81%ac%ec%a7%80%eb%a7%8c-10%eb%85%84-%ed%9b%84-%ec%9d%b4%ec%95%bc%ea%b8%b0%ec%a0%9c%ec%a1%b0%ec%97%85-%ed%98%84%ec%9e%a5.html&quot;&gt;“피지컬 AI, 기대는 크지만 10년 후 이야기”…제조업 현장의 냉정한 진단&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;github-trending&quot;&gt;GitHub Trending&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/Yeachan-Heo/oh-my-codex&quot;&gt;Yeachan-Heo/oh-my-codex&lt;/a&gt;&lt;br /&gt;OpenAI Codex CLI 위에 워크플로우 레이어를 추가하는 도구로, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$deep-interview&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ralplan&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$ralph&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$team&lt;/code&gt; 등의 스킬을 통해 요구사항 명확화부터 병렬 실행까지 일관된 개발 워크플로우를 제공한다. Codex의 실행 엔진은 그대로 유지하면서 프로젝트 가이던스, 계획, 로그, 상태를 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.omx/&lt;/code&gt; 디렉토리에 체계적으로 관리한다. tmux 기반 팀 런타임을 통해 여러 에이전트의 병렬 협업 작업도 지원한다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/luongnv89/claude-howto&quot;&gt;luongnv89/claude-howto&lt;/a&gt;&lt;br /&gt;Claude Code의 모든 기능을 체계적으로 학습할 수 있는 시각적 튜토리얼 가이드로, Slash Commands, Memory, Hooks, MCP, Subagents 등 10개 모듈을 단계별로 다룬다. 공식 문서와 달리 Mermaid 다이어그램, 복사-붙여넣기 가능한 실전 템플릿, 자가진단 퀴즈를 제공하여 초보자도 빠르게 파워 유저가 될 수 있도록 설계되었다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/microsoft/VibeVoice&quot;&gt;microsoft/VibeVoice&lt;/a&gt;&lt;br /&gt;Microsoft가 개발한 오픈소스 음성 AI 모델 패밀리로, TTS와 ASR 모델을 모두 포함한다. ASR 모델은 60분 길이의 오디오를 한 번에 처리하며 화자 구분, 타임스탬프, 50개 이상 언어를 지원하고, TTS 모델은 최대 90분 길이의 다화자 음성을 생성할 수 있다. 7.5Hz 초저 프레임레이트의 연속 음성 토크나이저와 next-token diffusion 프레임워크를 활용하여 높은 품질과 효율성을 동시에 달성한다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/siddharthvaddem/openscreen&quot;&gt;siddharthvaddem/openscreen&lt;/a&gt;&lt;br /&gt;Screen Studio의 무료 오픈소스 대안으로, 제품 데모 및 워크스루 영상을 쉽게 제작할 수 있는 화면 녹화 앱이다. 자동/수동 줌, 모션 블러, 주석, 구간별 속도 조절, 다양한 배경 커스터마이징 등 핵심 편집 기능을 제공한다. Electron + React + TypeScript로 구축되어 macOS, Windows, Linux를 모두 지원하며 MIT 라이선스로 무료 사용 가능하다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/google-research/timesfm&quot;&gt;google-research/timesfm&lt;/a&gt;&lt;br /&gt;Google Research에서 개발한 사전학습된 시계열 예측 Foundation Model로, ICML 2024에 발표되었다. 최신 버전인 TimesFM 2.5는 200M 파라미터로 최대 16K 컨텍스트 길이를 지원하며, 연속 분위수 예측이 가능하다. PyTorch와 Flax 백엔드를 모두 지원하고, BigQuery에서도 공식 제품으로 사용할 수 있어 실무 시계열 예측에 즉시 적용 가능하다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/Yeachan-Heo/oh-my-claudecode&quot;&gt;Yeachan-Heo/oh-my-claudecode&lt;/a&gt;&lt;br /&gt;Claude Code를 위한 멀티 에이전트 오케스트레이션 도구로, 설정 없이 즉시 사용 가능한 자동화된 개발 워크플로우를 제공한다. Team 모드를 통해 Claude, Codex, Gemini CLI 워커를 tmux 기반으로 병렬 실행할 수 있으며, deep-interview 기능으로 요구사항을 소크라테스식 질문법으로 명확히 한다. 자동 병렬화, 지속적 실행, 스마트 모델 라우팅으로 토큰 비용을 30~50% 절감하는 것이 특징이다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/NousResearch/hermes-agent&quot;&gt;NousResearch/hermes-agent&lt;/a&gt;&lt;br /&gt;Nous Research가 만든 자기 개선형 AI 에이전트로, 경험에서 스킬을 자동 생성하고 세션 간 학습을 지속하는 내장 학습 루프가 핵심이다. Telegram, Discord, Slack, WhatsApp 등 다양한 메시징 플랫폼과 CLI를 통해 접근 가능하며, OpenRouter를 통한 200개 이상의 모델을 지원한다. Docker, SSH, Modal 등 6가지 터미널 백엔드를 지원하여 5달러 VPS부터 GPU 클러스터까지 어디서든 실행할 수 있다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/onyx-dot-app/onyx&quot;&gt;onyx-dot-app/onyx&lt;/a&gt;&lt;br /&gt;LLM을 위한 오픈소스 AI 플랫폼으로, RAG, 웹 검색, 코드 실행, Deep Research, 파일 생성 등 고급 기능을 통합 제공한다. 50개 이상의 데이터 커넥터와 MCP를 통해 다양한 애플리케이션과 연동되며, 커스텀 에이전트 빌더와 음성 모드도 지원한다. SSO, RBAC, 감사 로그 등 엔터프라이즈 기능을 갖추고 있으며, Docker 한 줄 명령어로 셀프 호스팅이 가능하다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/sherlock-project/sherlock&quot;&gt;sherlock-project/sherlock&lt;/a&gt;&lt;br /&gt;사용자 이름으로 400개 이상의 소셜 네트워크에서 계정을 추적하는 OSINT(오픈소스 인텔리전스) 도구이다. pip, Docker, dnf 등 다양한 방식으로 설치 가능하며, Tor 프록시 지원, CSV/XLSX 내보내기, 여러 사용자 동시 검색 등의 기능을 제공한다. Apify를 통해 클라우드에서 설치 없이 실행할 수도 있어 접근성이 높다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/vas3k/TaxHacker&quot;&gt;vas3k/TaxHacker&lt;/a&gt;&lt;br /&gt;프리랜서와 소규모 사업자를 위한 셀프 호스팅 AI 회계 앱으로, 영수증이나 인보이스 사진을 업로드하면 AI가 자동으로 금액, 날짜, 항목 등을 인식하여 구조화된 데이터베이스에 저장한다. 170개 이상의 통화와 14개 암호화폐의 과거 환율 기반 자동 환전을 지원하며, OpenAI, Gemini, Ollama 등 원하는 LLM을 자유롭게 선택할 수 있다. Docker Compose로 간편하게 배포 가능하고, 커스텀 필드와 AI 프롬프트를 직접 설정하여 업종별 맞춤 사용이 가능하다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/stephenberry&quot;&gt;GitHub Developer: Stephen Berry (@stephenberry)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/mrgoonie&quot;&gt;GitHub Developer: Duy /zuey/ (@mrgoonie)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/mvanhorn&quot;&gt;GitHub Developer: Matt Van Horn (@mvanhorn)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/bartlomieju&quot;&gt;GitHub Developer: Bartek Iwańczuk (@bartlomieju)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/hluk&quot;&gt;GitHub Developer: Lukas Holecek (@hluk)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/keith&quot;&gt;GitHub Developer: Keith Smiley (@keith)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/vkehfdl1&quot;&gt;GitHub Developer: Jeffrey (Dongkyu) Kim (@vkehfdl1)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/alirezarezvani&quot;&gt;GitHub Developer: Alireza Rezvani (@alirezarezvani)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/777genius&quot;&gt;GitHub Developer: Илия (@777genius)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/MervinPraison&quot;&gt;GitHub Developer: Mervin Praison (@MervinPraison)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;etc&quot;&gt;Etc&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28201&quot;&gt;OpenClaw 권한 상승 취약점 (CVE-2026-33579)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28200&quot;&gt;FAA의 드론 비행 제한은 ICE 촬영을 범죄화하려는 시도&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28199&quot;&gt;iNaturalist - 자연 관찰자 커뮤니티&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3691&quot;&gt;AI 시대 해커톤은 어떻게 변해야 하는가?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3684&quot;&gt;몰트북(Moltbook)의 성공에서 반드시 읽어야 할 3가지 포인트&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3683&quot;&gt;개발자, 이직이 완벽한 도피처가 될 수 있을까요?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208808&quot;&gt;MS, 일본 AI 시장 확대 위해 15조 투자…AI 인재 100만명 양성&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208807&quot;&gt;메타 MSL, 스마트 안경과 별개로 ‘AI 전용 장치’ 개발 중&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208802&quot;&gt;머스크, 스페이스X IPO 참여 은행에 수천만달러 규모 ‘그록’ 구독 요구&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208800&quot;&gt;앤트로픽, AI 바이오 스타트업 ‘코에피션트 바이오’ 6000억에 인수&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4154098/%ea%b8%b0%ec%88%a0%ec%9d%80-%eb%a9%80%ec%a9%a1%ed%96%88%eb%8b%a4ai%ea%b0%80-%ec%95%84%eb%8b%88%eb%9d%bc-%ea%b2%bd%ec%98%81%ec%a7%84%ec%9d%b4-%ec%8b%a4%ed%8c%a8%ed%95%9c-%ea%b2%83.html&quot;&gt;기술은 멀쩡했다…”AI가 아니라 경영진이 실패한 것”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4154092/%ec%a0%80%ea%b0%80-pc%ea%b0%80-%ec%82%ac%eb%9d%bc%ec%a7%80%eb%8a%94-%ec%8b%9c%eb%8c%80-%ea%b8%b0%ec%97%85-%ec%97%85%ea%b7%b8%eb%a0%88%ec%9d%b4%eb%93%9c-%eb%aa%85%eb%b6%84-%ec%83%9d%ea%b2%bc%eb%82%98.html&quot;&gt;저가 PC가 사라지는 시대, 기업 업그레이드 명분 생겼나&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4154085/%ec%bd%94%eb%93%9c%eb%8a%94-%ec%9d%b4%ec%a0%9c-%ec%83%81%ed%92%88%ec%9d%b4%eb%8b%a4%ec%a3%bc%eb%8b%88%ec%96%b4-%ea%b0%9c%eb%b0%9c%ec%9e%90%ec%97%90%ea%b2%8c-%eb%82%a8%ec%9d%80-%ea%b2%83.html&quot;&gt;“코드는 이제 상품이다”…주니어 개발자에게 남은 것&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28198&quot;&gt;SSH 인증서: 더 나은 SSH 경험&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28195&quot;&gt;Samsung Magician 디스크 유틸리티 제거하려면 18단계와 두 번의 재부팅 필요&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28191&quot;&gt;이란 상공에서 미군 F-15E 전투기 격추, 승무원 1명 구조&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28189&quot;&gt;Show GN: Lectone - PDF/PPT 올리면 AI가 강의 영상으로 만들어 드립니다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28187&quot;&gt;Oracle, 대규모 해고 중에도 H-1B 비자 수천 건 신청&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28186&quot;&gt;당신의 엔지니어링 팀이 느린 진짜 이유는 사람이 아니라 코드베이스다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=28185&quot;&gt;에이전트가 생성한 코드를 책임감 있게 다루기: Vercel의 프레임워크&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Sat, 04 Apr 2026 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2026/04/04/weekly-dev-links-2026w14/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2026/04/04/weekly-dev-links-2026w14/</guid>
			</item>
		
			<item>
				<title>주간 테크/개발 뉴스 #2026 3/22 ~ 3/28</title>
				        
        <description>&lt;h2 id=&quot;ai&quot;&gt;AI&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://blog.mozilla.ai/cq-stack-overflow-for-agents?ref=console.dev&quot;&gt;Beta: cq&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27954&quot;&gt;이란 학교 폭탄 테러의 책임이 AI에 있다는 비난이 쏟아졌지만, 진실은 훨씬 더 충격적이다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27946&quot;&gt;Show GN: 31개의 LLM을 교차검증 체계로 엮은 100% 자율 주식 매매 시스템&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27943&quot;&gt;Z.AI Coding Plan, GLM-5.1 모델 지원 — Claude Code·OpenClaw에서 전환 방법&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27942&quot;&gt;Codex 플러그인 출시 — Slack, Figma, Notion, Gmail 등 주요 도구와 즉시 연동&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27941&quot;&gt;.claude/ 폴더 구조 분석&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27938&quot;&gt;Codex 활용 사례 모음&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27925&quot;&gt;GitHub Copilot 상호작용 데이터 사용 정책 업데이트&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3680&quot;&gt;20년 전 게임 ‘건즈 온라인’를 브라우저로 이식한 개발자&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3677&quot;&gt;개발자를 위한 Claude Code 토큰 사용량 최적화 전략&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3676&quot;&gt;하네스 경쟁의 시작, 왜 opencode와 OMO일까?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3675&quot;&gt;당신의 취향(Taste)은 AI보다 나은가?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208499&quot;&gt;구글의 내부용 ‘에이전트 스미스’ 인기 폭발…“접근 제한할 정도”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208497&quot;&gt;구글 ‘터보퀀트’ 충격으로 메모리 시총 150조 증발…“제2의 딥시크 사태인가”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208493&quot;&gt;앤트로픽, 사상 최강 모델 ‘클로드 미소스’ 출시 임박&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208486&quot;&gt;베슬AI “엔비디아 최신 GPU, 빅테크 대비 최대 80% 저렴한 비용으로 제공”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208437&quot;&gt;애플, 시리를 챗GPT 외 타사 모델과도 연결하는 ‘개방형’으로 확장&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208445&quot;&gt;오픈AI, 내부 반발·B2B 집중에 ‘성인 모드’ 출시 무기한 연기…폐기도 검토&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4150313/ai-%ec%8b%9c%eb%8c%80-%ec%a7%84%ec%a7%9c-%ea%b2%bd%ec%9f%81%eb%a0%a5%ec%9d%80-%eb%8d%b0%ec%9d%b4%ed%84%b0%c2%b7%ec%9d%b8%ed%94%84%eb%9d%bc%c2%b7%ec%9d%b8%ea%b0%84-%ed%81%b4%eb%9d%bc%ec%9a%b0.html&quot;&gt;“AI 시대 진짜 경쟁력은 데이터·인프라·인간” 클라우드 &amp;amp; AI 서밋 2026, 비즈니스 혁신 전략을 총망라하다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4150327/30%eb%85%84%ec%9d%84-%eb%b2%84%ed%85%a8%ec%98%a8-%ec%9e%90%eb%b0%94-%ec%a7%80%ea%b8%88%eb%8f%84-%ec%9c%84%eb%8c%80%ed%95%9c-9%ea%b0%80%ec%a7%80-%ec%9d%b4%ec%9c%a0.html&quot;&gt;30년을 버텨온 자바, 지금도 위대한 9가지 이유&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4150296/%ec%a4%8c-%ec%97%90%ec%9d%b4%ec%a0%84%ed%8a%b8-ai-%ec%8b%9c%eb%8c%80%ec%9d%98-%eb%ac%b4%ea%b8%b0%eb%a1%9c-%ec%82%ac%eb%9e%8c-%ea%b0%84-%eb%8c%80%ed%99%94-%ea%ba%bc%eb%82%b4%eb%93%a4%eb%8b%a4.html&quot;&gt;줌, 에이전트 AI 시대의 무기로 ‘사람 간 대화’ 꺼내들다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4149038/%ec%98%a4%ed%94%88%ed%81%b4%eb%a1%9c%ea%b0%80-%eb%b0%94%ea%be%bc-%ed%8c%90%eb%b9%85%ed%85%8c%ed%81%ac-ai%ec%9d%98-%eb%8b%a4%ec%9d%8c-%ec%a0%84%ec%9e%a5%ec%9d%80-%eb%8d%b0%ec%8a%a4%ed%81%ac.html&quot;&gt;오픈클로가 바꾼 판…빅테크 AI의 다음 전장은 데스크톱&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27924&quot;&gt;LiteLLM 공급망 공격에 대한 분 단위 대응 기록&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27923&quot;&gt;판사가 Anthropic을 ‘공급망 위험’으로 지정하려던 국방부 조치 차단&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27922&quot;&gt;A.T.L.A.S - $500 GPU가 코딩 벤치마크에서 Claude Sonnet을 능가&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;backend&quot;&gt;Backend&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/pyodide/pyodide?ref=console.dev&quot;&gt;Tool: Pyodide&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4150286/%ec%8b%9c%eb%a6%ac-%ec%97%86%ec%9d%b4%eb%8f%84-%ea%bd%89-%ec%b0%ac-ios-26-4-%ec%97%85%eb%8d%b0%ec%9d%b4%ed%8a%b8-%ec%a0%95%eb%a6%ac.html&quot;&gt;시리 없이도 꽉 찬 iOS 26.4 업데이트 정리&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4149060/ai-%ec%a4%91%ec%8b%ac-%ec%8b%9c%eb%8c%80%ec%97%90-%ec%86%8c%ed%94%84%ed%8a%b8%ec%9b%a8%ec%96%b4-%ea%b0%9c%eb%b0%9c-%ec%9d%bc%ec%9e%90%eb%a6%ac%eb%a5%bc-%ec%96%bb%eb%8a%94-%eb%b0%a9%eb%b2%95.html&quot;&gt;AI 중심 시대에 소프트웨어 개발 일자리를 얻는 방법&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4148431/%ed%81%b4%eb%9d%bc%ec%9a%b0%eb%93%9c-20%eb%85%84-%eb%b9%84%ec%9a%a9%ea%b3%bc-%eb%b3%b5%ec%9e%a1%ec%84%b1-%ed%86%b5%ec%a0%9c.html&quot;&gt;클라우드 20년 : 비용과 복잡성, 통제&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4148426/%ec%97%90%ec%9d%b4%ec%a0%84%ed%8a%b8-ai-%ed%94%84%eb%a1%9c%ec%a0%9d%ed%8a%b8-40%ea%b0%80-%ec%8b%a4%ed%8c%a8%ed%95%98%eb%8a%94-%ec%9d%b4%ec%9c%a0-%eb%aa%a8%eb%8d%b8%ec%9d%b4-%ec%95%84%eb%8b%88.html&quot;&gt;에이전트 AI 프로젝트 40%가 실패하는 이유, 모델이 아니라 신뢰&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;infracloud&quot;&gt;Infra/Cloud&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3679&quot;&gt;누구도 알려주지 않는 AWS 보안의 첫 번째 원칙&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4150299/ai-%eb%b2%84%ea%b7%b8-%ec%a0%9c%ec%b6%9c-%ec%82%ac%ec%a0%88%eb%b9%85%ed%85%8c%ed%81%ac-%ec%8a%a4%ec%8a%a4%eb%a1%9c-%eb%a7%8c%eb%93%a0-%ec%98%a4%ed%94%88%ec%86%8c%ec%8a%a4-%eb%b3%b4.html&quot;&gt;“AI 버그 제출 사절”…빅테크, 스스로 만든 오픈소스 보안 위기 수습 나서&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4149704/%ec%9c%88%eb%8f%84%ec%9a%b0-11%ec%9d%b4-%ec%9e%ac%ec%b1%84%ea%b8%b0%ed%95%98%eb%a9%b4-%ec%95%a0%ec%a0%80-%ed%81%b4%eb%9d%bc%ec%9a%b0%eb%93%9c%ea%b0%80-%ea%b0%90%ea%b8%b0%ec%97%90-%ea%b1%b8%eb%a6%b0.html&quot;&gt;윈도우 11이 재채기하면 애저 클라우드가 감기에 걸린다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;tools&quot;&gt;Tools&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.emailmd.dev/?ref=console.dev&quot;&gt;Tool: EmailMD&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27940&quot;&gt;jq보다 빠른 jsongrep&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27934&quot;&gt;4월 24일까지 거부하지 않으면 GitHub이 개인 저장소로 AI 학습을 진행함&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27929&quot;&gt;AI 에이전트를 $7/월 VPS에 배치하고 IRC를 전송 계층으로 사용한 디지털 도어맨 구축&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3673&quot;&gt;코드는 줄고 판단은 남았다: AI 시대 개발자의 일일일&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;github-trending&quot;&gt;GitHub Trending&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/mvanhorn/last30days-skill&quot;&gt;mvanhorn/last30days-skill&lt;/a&gt;&lt;br /&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;last30days&lt;/code&gt;는 Claude Code 또는 OpenAI Codex CLI에서 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/last30days &lt;/code&gt; 명령으로 Reddit, X, Bluesky, YouTube, TikTok, Instagram, Hacker News, Polymarket 등 8개 소스를 병렬로 검색해 최근 30일간 커뮤니티에서 실제로 화제가 된 내용을 종합 요약해주는 skill이다. 단순 키워드 검색이 아니라 참여도, 출처 신뢰도, 플랫폼 간 수렴 신호 등 다중 품질 지표로 결과를 랭킹하며, v2.9.5에서는 Bluesky 지원과 “X vs Y” 비교 분석 모드가 추가되었다. AI 도구 프롬프트 기법, 트렌드, 예측…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/bytedance/deer-flow&quot;&gt;bytedance/deer-flow&lt;/a&gt;&lt;br /&gt;DeerFlow는 ByteDance가 개발한 오픈소스 &lt;strong&gt;super agent harness&lt;/strong&gt;로, sub-agents, memory, sandbox를 orchestrate하여 extensible skills 기반으로 거의 모든 작업을 수행할 수 있다. Python 3.12+와 Node.js 22+ 환경에서 동작하며, LangChain 호환 모델(GPT, Claude, Gemini 등)과 MCP Server, Claude Code Integration을 지원해 강력한 AI 에이전트 파이프라인 구축이 가능하다. v1의 Deep Research 프레임워크를 완전히 재작성한 2.0 버전으로, 2026년 2월 GitHub…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/FujiwaraChoki/MoneyPrinterV2&quot;&gt;FujiwaraChoki/MoneyPrinterV2&lt;/a&gt;&lt;br /&gt;Twitter Bot, YouTube Shorts 자동화, Amazon 제휴 마케팅, 지역 비즈니스 콜드 아웃리치 등 온라인 수익 창출 과정을 자동화하는 Python 기반 도구로, 모듈형 아키텍처로 완전히 재작성된 2세대 버전이다. CRON Job 기반 스케줄러를 내장해 반복 작업을 자동화할 수 있으며, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gpt4free&lt;/code&gt;와 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;KittenTTS&lt;/code&gt; 등을 활용해 콘텐츠 생성부터 배포까지 파이프라인을 구성한다. 다양한 수익화 채널을 단일 도구로 통합한 점에서 콘텐츠 자동화 및 마케팅 자동화에 관심 있는 개발자들에게 주목할 만하다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/Crosstalk-Solutions/project-nomad&quot;&gt;Crosstalk-Solutions/project-nomad&lt;/a&gt;&lt;br /&gt;Project N.O.M.A.D.는 인터넷 없이도 동작하는 오프라인 우선 지식·교육 서버로, Docker 기반의 관리 UI(“Command Center”)를 통해 Ollama(AI 챗봇), Kiwix(오프라인 Wikipedia), Kolibri(Khan Academy 강의), ProtoMaps(오프라인 지도), CyberChef(데이터 분석) 등 다양한 도구를 단일 설치로 제공한다. Debian 계열 OS에 스크립트 한 줄로 설치 가능하며, RAG(Retrieval-Augmented Generation)를 위한 Qdrant 기반 문서 검색과 시스템 벤치마크 리더보드까지 내장되어 있어 재난·격리 환경이나 네트워크 미비…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/TauricResearch/TradingAgents&quot;&gt;TauricResearch/TradingAgents&lt;/a&gt;&lt;br /&gt;TradingAgents는 실제 트레이딩 회사의 구조를 모방해 Fundamentals/Sentiment/News/Technical Analyst, Researcher, Trader, Risk Management 등 LLM 기반 전문 에이전트들이 협업하여 투자 결정을 내리는 멀티 에이전트 금융 트레이딩 프레임워크다. GPT, Gemini, Claude, Grok 등 다양한 LLM provider를 지원하며, 에이전트들이 structured debate를 통해 최적 전략을 도출하는 점이 기존 단일 모델 방식과 차별화된다. 연구 목적의 오픈소스 프로젝트로, CLI를 통해 ticker와 LLM provider를 선택해 바로…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/hacksider/Deep-Live-Cam&quot;&gt;hacksider/Deep-Live-Cam&lt;/a&gt;&lt;br /&gt;단 하나의 이미지만으로 실시간 얼굴 교체(face swap)와 딥페이크 영상을 생성할 수 있는 오픈소스 도구로, GFPGAN, onnxruntime, CUDA/CoreML 가속을 지원해 NVIDIA/AMD GPU와 Apple Silicon 환경 모두에서 구동된다. 라이브 방송, 영화 감상, 멀티 얼굴 매핑 등 다양한 실시간 활용 시나리오를 3클릭만으로 구현할 수 있으며, 클릭 수 대비 압도적인 접근성과 성능으로 GitHub Trending 상위권에 오른 주목받는 프로젝트다. 부적절한 콘텐츠 차단 등 윤리적 안전장치를 내장하고 있으나, 실제 인물 사용 시 동의 획득 등 사용자 책임이 강조된다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/supermemoryai/supermemory&quot;&gt;supermemoryai/supermemory&lt;/a&gt;&lt;br /&gt;Supermemory는 AI 대화 간 기억 상실 문제를 해결하는 최첨단 memory·context 엔진으로, LongMemEval·LoCoMo·ConvoMem 세 가지 주요 AI 메모리 벤치마크에서 1위를 기록했다. 대화에서 사실을 자동 추출해 사용자 프로필을 구축하고, RAG·hybrid search·multi-modal 파일 처리·Google Drive·Notion 등 외부 커넥터를 단일 API로 통합 제공한다. npm/pip 패키지, MCP 서버, Claude Code·Cursor·Windsurf 플러그인까지 지원해 개인 사용자부터 AI 앱 개발자까지 코드 없이도 바로 영구 메모리를 활용할 수 있다는 점이 주목할…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/affaan-m/everything-claude-code&quot;&gt;affaan-m/everything-claude-code&lt;/a&gt;&lt;br /&gt;Claude Code를 비롯한 Codex, Cursor 등 다양한 AI agent harness의 성능을 극대화하기 위한 종합 최적화 시스템으로, Anthropic 해커톤 수상 프로젝트를 기반으로 10개월 이상 실전 사용을 통해 발전시킨 production-ready 설정 모음이다. skills, memory persistence, hook, MCP 설정, 보안 스캐닝(AgentShield), token 최적화, subagent orchestration 등 AI 개발 워크플로우 전반을 커버하며, 10개 이상의 언어 생태계(TypeScript, Python, Go, Java, Kotlin, Rust 등)와 다양한 도메인…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/harry0703/MoneyPrinterTurbo&quot;&gt;harry0703/MoneyPrinterTurbo&lt;/a&gt;&lt;br /&gt;MoneyPrinterTurbo는 주제나 키워드만 입력하면 AI가 영상 스크립트, 소재, 자막, 배경음악까지 자동으로 생성해 고화질 쇼츠 영상을 완성해주는 Python 기반 자동화 도구다. OpenAI, DeepSeek, Google Gemini, Ollama 등 다양한 LLM을 지원하고, Web UI와 REST API 모두 제공하는 MVC 아키텍처로 설계되어 확장성이 높다. 영상 제작 파이프라인 전체를 단일 툴로 자동화한다는 점에서 콘텐츠 크리에이터나 미디어 자동화에 관심 있는 개발자에게 주목할 만하다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/NousResearch/hermes-agent&quot;&gt;NousResearch/hermes-agent&lt;/a&gt;&lt;br /&gt;Hermes Agent는 Nous Research가 개발한 자기 개선형 AI 에이전트로, 복잡한 작업 수행 후 자동으로 skill을 생성·개선하고 FTS5 기반 세션 검색과 Honcho user modeling을 통해 대화 간 맥락을 축적하는 폐쇄형 학습 루프가 핵심 특징이다. OpenRouter, OpenAI 등 200개 이상의 모델을 코드 변경 없이 전환할 수 있으며, Telegram, Discord, Slack 등 다양한 메시징 플랫폼과 Docker, SSH, Modal 같은 여러 실행 환경을 지원한다. 병렬 subagent 실행, cron 스케줄링, MCP 통합, RL 학습용 trajectory 생성까지 지원해…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/mvanhorn&quot;&gt;GitHub Developer: Matt Van Horn (@mvanhorn)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/bradygaster&quot;&gt;GitHub Developer: Brady Gaster (@bradygaster)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/ruvnet&quot;&gt;GitHub Developer: rUv (@ruvnet)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/max-sixty&quot;&gt;GitHub Developer: Maximilian Roos (@max-sixty)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/majiayu000&quot;&gt;GitHub Developer: lif (@majiayu000)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/emilk&quot;&gt;GitHub Developer: Emil Ernerfeldt (@emilk)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/peters&quot;&gt;GitHub Developer: Peter Rekdal Khan-Sunde (@peters)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/mrgoonie&quot;&gt;GitHub Developer: Duy /zuey/ (@mrgoonie)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/alirezarezvani&quot;&gt;GitHub Developer: Alireza Rezvani (@alirezarezvani)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/chenhg5&quot;&gt;GitHub Developer: cg33 (@chenhg5)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;etc&quot;&gt;Etc&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/antithesishq/bombadil?ref=console.dev&quot;&gt;Beta: Bombadil&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://geajs.com?ref=console.dev&quot;&gt;Beta: Gea&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3674&quot;&gt;AI와 만든 앱에 결제를 붙이는 가장 현명한 방법들 (Feat. MoR)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3672&quot;&gt;클로드 코드와 MCP 연결로 디자인 감도 높이는 법&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3671&quot;&gt;UX 데이터 분석부터 퍼소나 생성까지, 어피니티버블 사용기&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3668&quot;&gt;cURL은 왜 버그 바운티를 끝냈을까?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208500&quot;&gt;“리더십도 AI 시대 위한 전환 필요”…코카콜라·월마트 CEO, 퇴임 이유로 AI 들어&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208498&quot;&gt;‘블랙리스트’ 기업 논문 발표 금지한 뉴립스, 중국 반발에 “단순 실수” 해명&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208489&quot;&gt;구글, 앤트로픽의 데이터센터 임대에 자금 지원 예정&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208494&quot;&gt;메타, 기존 안경 착용자를 위한 새로운 AI 안경 출시 예정&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27953&quot;&gt;Show GN: 접근성 떨어지는 KOCW 같은 국내 강의들을 YouTube로 옮기고 있습니다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27952&quot;&gt;바보야, 문제는 경계야&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Sat, 28 Mar 2026 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2026/03/28/weekly-dev-links-2026w13/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2026/03/28/weekly-dev-links-2026w13/</guid>
			</item>
		
			<item>
				<title>주간 테크/개발 뉴스 #2026 3/15 ~ 3/21</title>
				        
        <description>&lt;h2 id=&quot;ai&quot;&gt;AI&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/onecli/onecli?ref=console.dev&quot;&gt;Beta: OneCLI&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27708&quot;&gt;실행 중인 세션에 채널을 통해 이벤트 푸시하기&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27705&quot;&gt;MacBook M5 Pro와 Qwen3.5 기반 로컬 AI 보안 시스템&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27702&quot;&gt;Cursor Composer 2는 Kimi K2.5에 RL을 적용한 모델로 확인&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27698&quot;&gt;OpenCode – 오픈소스 AI 코딩 에이전트&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27692&quot;&gt;Windows 품질에 대한 우리의 약속&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27690&quot;&gt;Claude Code, 클라우드 기반 예약 작업 기능 추가&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27687&quot;&gt;GPT-5.4로 세련된 프론트엔드 디자인하기&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3669&quot;&gt;멀티 AI 터미널 도구 3대장, 뭐가 다를까? 클로드코드 vs 코덱스CLI vs 제미나이CLI&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3666&quot;&gt;Codex 서브에이전트 136개 모음집: awesome-codex-subagents&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3665&quot;&gt;[릴리즈 노트] 역대 최강 소형 모델, 오픈AI GPT-5.4 mini·nano 출시&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3660&quot;&gt;클로드 코드로 ‘해외 송금 비교 서비스’ 만들어봤습니다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208176&quot;&gt;아마존, 12년 만에 스마트폰 시장 재도전…음성 기반 AI 장치 개발 중&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208162&quot;&gt;앤트로픽, 오픈클로에 대응하는 ‘클로드 코드 채널’ 출시&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208172&quot;&gt;MS, 윈도우에서 ‘코파일럿’ AI 기능 축소…“사용자 편의에 집중”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208160&quot;&gt;오픈AI, 챗GPT·코덱스·브라우저 통합한 ‘데스크톱 슈퍼 앱’ 개발 예정&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208122&quot;&gt;구글, ‘제미나이 맥’ 앱 비공개 테스트 시작…챗GPT·클로드에 대응&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4147958/%eb%a7%88%ed%81%ac%eb%8b%a4%ec%9a%b4%ec%9d%b4-%ec%9d%bc%ea%b8%89-%ec%bd%94%eb%94%a9-%ec%96%b8%ec%96%b4%ea%b0%80-%eb%90%9c-%ec%9d%b4%ec%9c%a0.html&quot;&gt;마크다운이 일급 코딩 언어가 된 이유&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4147952/%ed%95%b5%eb%ac%b4%ea%b8%b0-%eb%a7%8c%eb%93%9c%eb%8a%94-%eb%b2%95-%ec%95%8c%eb%a0%a4%ec%a4%98ai%eb%8a%94-%ea%b1%b0%ec%a0%88%ed%96%88%ea%b3%a0-%ea%b2%80%ec%97%b4-%ed%95%b4%ec%a0%9c.html&quot;&gt;“핵무기 만드는 법 알려줘”…AI는 거절했고 검열 해제 모델은 답했다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4146698/%ea%b8%b0%ec%97%85%ec%9d%98-%ec%95%88%ec%a0%95%ec%84%b1%ec%9d%84-%ec%9c%84%ed%98%91%ed%95%98%eb%8a%94-%ed%81%b4%eb%9d%bc%ec%9a%b0%eb%93%9c-%ea%b8%b0%eb%b0%98-llm.html&quot;&gt;기업의 안정성을 위협하는 클라우드 기반 LLM&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;backend&quot;&gt;Backend&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://oseifert.ch/blog/building-pgit?ref=console.dev&quot;&gt;Tool: pgit&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27701&quot;&gt;Show GN: Cluefin-Dure - 증권사/DART API를 활용한 국내주식 멀티 AI 에이전트&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27699&quot;&gt;Ghostling - Minimum Viable 터미널 에뮬레이터&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27691&quot;&gt;Tabularis - 개발자용 크로스플랫폼 DB 관리 애플리케이션&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4147397/sql%ec%9d%98-%ea%b7%80%ed%99%98-50%eb%85%84-%eb%90%9c-%ec%96%b8%ec%96%b4%ea%b0%80-%ec%8a%a4%ec%8a%a4%eb%a1%9c-%ed%83%88%eb%b0%94%ea%bf%88%ed%95%98%eb%8a%94-%eb%b0%a9%eb%b2%95.html&quot;&gt;SQL의 귀환 : 50년 된 언어가 스스로 탈바꿈하는 방법&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;infracloud&quot;&gt;Infra/Cloud&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208173&quot;&gt;엔비디아, 아마존에 2027년까지 GPU 100만개 공급 계약&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4146708/%ec%97%94%eb%b9%84%eb%94%94%ec%95%84-gtc-2026%ec%84%9c-%ec%97%90%ec%9d%b4%ec%a0%84%ed%8a%b8-%ed%88%b4%ed%82%b7-%ea%b3%b5%ea%b0%9c%ec%9e%90%ec%9c%a8-%ec%8b%a4%ed%96%89.html&quot;&gt;엔비디아, GTC 2026서 ‘에이전트 툴킷’ 공개…자율 실행형 AI 시대 본격화&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4146610/vpn%ec%9d%98-%ed%95%9c%ea%b3%84-%eb%aa%85%ed%99%95%ed%95%98%ec%9d%b4%eb%b8%8c%eb%a6%ac%eb%93%9c-%ec%97%85%eb%ac%b4-%ec%8b%9c%eb%8c%80%ec%97%90-%ec%86%8d%eb%8f%84%ec%99%80.html&quot;&gt;“VPN의 한계 명확”…하이브리드 업무 시대에 속도와 보안의 딜레마를 끝내는 방법&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4146025/ai-%ed%94%84%eb%a1%9c%ea%b7%b8%eb%9e%98%eb%b0%8d%ec%9d%98-%ed%95%9c%ea%b3%84%eb%a5%bc-%ec%a0%88%ea%b0%90%ed%95%98%ea%b3%a0-%ec%9e%88%eb%8a%94-%ec%95%84%eb%a7%88%ec%a1%b4.html&quot;&gt;AI 프로그래밍의 한계를 절감하고 있는 아마존&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;tools&quot;&gt;Tools&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/chenxin-yan/crust?ref=console.dev&quot;&gt;Beta: Crust&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4147361/%ec%a0%9c%eb%af%b8%eb%82%98%ec%9d%b4%eb%a1%9c-%ea%b5%ac%ea%b8%80-%ec%8b%9c%ed%8a%b8-%ec%83%9d%ec%82%b0%ec%84%b1-%eb%86%92%ec%9d%b4%eb%8a%94-%eb%b0%a9%eb%b2%95-6%ea%b0%80%ec%a7%80.html&quot;&gt;제미나이로 구글 시트 생산성 높이는 방법 6가지&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27684&quot;&gt;Waymo 안전 영향 분석&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;github-trending&quot;&gt;GitHub Trending&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/jarrodwatts/claude-hud&quot;&gt;jarrodwatts/claude-hud&lt;/a&gt;&lt;br /&gt;Claude HUD는 Claude Code 사용 중 context 소비량, 활성 tool/agent 상태, todo 진행률 등을 터미널 하단에 실시간으로 표시해주는 statusline 플러그인이다. Claude Code의 native statusline API를 활용해 별도 창이나 tmux 없이 동작하며, 약 300ms 간격으로 갱신되고 layout·색상·표시 항목을 세밀하게 커스터마이징할 수 있다. Context window가 얼마나 찼는지, 요금제별 사용량 한도가 어디까지 왔는지를 시각적 bar로 보여주기 때문에 세션 관리와 비용 감각을 높이는 데 유용하다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/666ghj/MiroFish&quot;&gt;666ghj/MiroFish&lt;/a&gt;&lt;br /&gt;MiroFish는 multi-agent 기반의 AI 예측 엔진으로, 뉴스·정책·금융 신호 등 현실 데이터를 시드로 투입하면 독립적 인격과 장기 기억을 가진 수천 개의 agent가 상호작용하는 고충실도 디지털 세계를 자동 구축하여 미래 시나리오를 시뮬레이션한다. GraphRAG 기반 지식 그래프 구축, OASIS 시뮬레이션 엔진, Zep Cloud 메모리 관리 등을 결합해 여론 추이 예측부터 소설 결말 추론까지 다양한 도메인에 범용적으로 적용할 수 있다는 점이 특징이다. 군중 지능(Swarm Intelligence)의 창발적 행동을 활용해 전통적 예측 모델의 한계를 넘으려는 접근이 주목할 만하며, 盛大(Shanda)…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/obra/superpowers&quot;&gt;obra/superpowers&lt;/a&gt;&lt;br /&gt;Superpowers는 코딩 에이전트(Claude Code, Cursor, Codex 등)에 브레인스토밍→설계→TDD 기반 구현→코드 리뷰→병합까지의 체계적인 소프트웨어 개발 워크플로우를 자동으로 부여하는 composable skill 플러그인 시스템이다. 핵심은 에이전트가 바로 코드를 작성하지 않고 먼저 스펙을 정리한 뒤, subagent-driven-development 방식으로 작업을 분할·위임하여 수 시간 자율 개발이 가능하다는 점이다. TDD, YAGNI, 체계적 디버깅 등 엔지니어링 모범 사례를 강제하는 mandatory workflow로 동작하므로, 에이전트의 코드 품질과 자율성을 동시에 끌어올릴 수 있어…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/langchain-ai/deepagents&quot;&gt;langchain-ai/deepagents&lt;/a&gt;&lt;br /&gt;Deep Agents는 LangChain 팀이 Claude Code에서 영감을 받아 만든 “batteries-included” agent harness로, 계획 수립, 파일시스템 접근, shell 실행, sub-agent 위임, 자동 context 관리 등을 별도 설정 없이 즉시 사용할 수 있는 오픈소스(MIT) 에이전트 프레임워크다. LangGraph 위에 구축되어 streaming, persistence, checkpointing 등 프로덕션 기능을 그대로 활용할 수 있으며, 모델·도구·프롬프트를 자유롭게 교체할 수 있어 provider에 종속되지 않는다. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pip install deepagents&lt;/code&gt; 한 줄로 바로…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/affaan-m/everything-claude-code&quot;&gt;affaan-m/everything-claude-code&lt;/a&gt;&lt;br /&gt;Claude Code, Codex, Cowork 등 AI 에이전트 하네스의 성능을 극대화하기 위한 종합 시스템으로, 단순 설정 파일 모음이 아니라 skills, hooks, memory 최적화, 보안 스캐닝(AgentShield), 지속적 학습 등 프로덕션 수준의 에이전트 운용 체계를 제공한다. 10개월 이상의 실전 사용에서 발전시킨 구성으로 TypeScript, Python, Go, Java, Kotlin 등 12개 언어 생태계를 지원하며, 선택적 설치(manifest-driven install), subagent 오케스트레이션, token 최적화, Git worktree 기반 병렬화 같은 고급 워크플로우까지…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/FujiwaraChoki/MoneyPrinterV2&quot;&gt;FujiwaraChoki/MoneyPrinterV2&lt;/a&gt;&lt;br /&gt;MoneyPrinterV2는 온라인 수익 창출을 자동화하는 Python 애플리케이션으로, Twitter 봇, YouTube Shorts 자동 생성, Amazon Affiliate 마케팅, 로컬 비즈니스 발굴 및 콜드 아웃리치 기능을 통합 제공한다. 기존 MoneyPrinter를 모듈형 아키텍처로 완전히 재작성한 V2 버전이며, CRON 기반 스케줄러로 콘텐츠 게시를 자동화할 수 있다. 다양한 수익화 채널을 하나의 도구로 묶었다는 점에서 개인 크리에이터나 사이드 프로젝트용으로 주목할 만하다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/lightpanda-io/browser&quot;&gt;lightpanda-io/browser&lt;/a&gt;&lt;br /&gt;Lightpanda는 Chromium이나 WebKit 기반이 아닌 Zig로 처음부터 새로 작성된 오픈소스 headless 브라우저로, AI 에이전트와 웹 자동화에 특화되어 Chrome 대비 11배 빠른 실행 속도와 9배 적은 메모리 사용량을 제공한다. CDP(Chrome DevTools Protocol)를 지원해 Puppeteer, Playwright, chromedp 등 기존 자동화 도구와 호환되며, JavaScript 실행, DOM API, Fetch/XHR, 쿠키, 프록시, robots.txt 준수 등 핵심 웹 기능을 갖추고 있다. 기존 브라우저 엔진의 포크가 아닌 완전히 새로운 구현이라는 점에서 headless…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/shareAI-lab/learn-claude-code&quot;&gt;shareAI-lab/learn-claude-code&lt;/a&gt;&lt;br /&gt;Claude Code의 “harness(하네스)” 설계 패턴을 체계적으로 가르치는 학습 저장소로, AI agent의 본질은 framework나 prompt chain이 아닌 모델 자체라는 관점에서 출발한다. Tools, Knowledge, Observation, Action Interfaces, Permissions로 구성되는 harness 엔지니어링을 코딩 에이전트 중심으로 다루되, 농업·호텔·제조 등 모든 도메인에 일반화할 수 있는 설계 원칙을 제시한다. DQN, AlphaStar, OpenAI Five 등 AI agent 역사를 관통하는 철학적 토대 위에 실무 harness 구축법을 정리했다는 점에서, 단순…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/voidzero-dev/vite-plus&quot;&gt;voidzero-dev/vite-plus&lt;/a&gt;&lt;br /&gt;Vite+는 Vite, Vitest, Oxlint, Oxfmt, Rolldown, tsdown 등 웹 개발에 필요한 도구들을 하나의 CLI(&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vp&lt;/code&gt;)로 통합한 zero-config 툴체인으로, 개발 서버부터 빌드, 테스트, 린트, 포맷, 패키지 관리, monorepo 태스크 캐싱까지 단일 의존성으로 처리한다. 모든 설정을 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vite.config.ts&lt;/code&gt; 하나로 관리할 수 있어 기존에 도구별로 흩어져 있던 설정 파일들을 통합하고, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vp migrate&lt;/code&gt;로 기존 프로젝트도 손쉽게 전환할 수 있다. Vite 생태계의 핵심 도구들을 Evan You 주도로 하나의 응집력 있는 개발 경험으로 묶었다는 점에서 프론트엔드 툴링의…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/unslothai/unsloth&quot;&gt;unslothai/unsloth&lt;/a&gt;&lt;br /&gt;Unsloth는 LLM을 최대 2배 빠르게, VRAM은 최대 70~80% 절감하면서 fine-tuning과 강화학습(GRPO 등)을 수행할 수 있는 오픈소스 도구로, 커스텀 Triton 커널과 수학 최적화를 통해 정확도 손실 없이 500개 이상의 모델을 지원한다. Unsloth Studio라는 웹 UI를 제공하여 모델 검색·실행·학습·GGUF 변환·데이터셋 자동 생성까지 로컬 환경(Windows/Linux/macOS)에서 통합 관리할 수 있으며, text뿐 아니라 audio·vision·embedding 모델의 fine-tuning도 지원한다. Llama 4, Qwen3, Gemma, Phi-4 등 최신 모델 팀과…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/backnotprop&quot;&gt;GitHub Developer: Michael Ramos (@backnotprop)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/bradygaster&quot;&gt;GitHub Developer: Brady Gaster (@bradygaster)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/mitchellh&quot;&gt;GitHub Developer: Mitchell Hashimoto (@mitchellh)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/jackwener&quot;&gt;GitHub Developer: jakevin (@jackwener)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/alirezarezvani&quot;&gt;GitHub Developer: Alireza Rezvani (@alirezarezvani)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/rasbt&quot;&gt;GitHub Developer: Sebastian Raschka (@rasbt)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/sxyazi&quot;&gt;GitHub Developer: 三咲雅 misaki masa (@sxyazi)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/cryppadotta&quot;&gt;GitHub Developer: Dotta (@cryppadotta)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/pbakaus&quot;&gt;GitHub Developer: Paul Bakaus (@pbakaus)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/jarrodwatts&quot;&gt;GitHub Developer: Jarrod Watts (@jarrodwatts)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;etc&quot;&gt;Etc&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://oat.ink/?ref=console.dev&quot;&gt;Tool: Oat&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3667&quot;&gt;메타는 왜 AI끼리만 논다는 몰트북을 인수했을까?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3664&quot;&gt;요즘IT 독자 선정 국내 1등 협업툴은 무엇이 다른가&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3663&quot;&gt;개발자의 일상, 글감으로 바꾸는 ‘글감봇’을 만들다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3662&quot;&gt;바이브 코딩으로 만든 앱을 0원으로 배포하는 법&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3661&quot;&gt;소프트웨어 기획 전용 AI 개발기&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3659&quot;&gt;자바스크립트 Proxy와 Reflect, 객체를 다루는 새로운 방법&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208177&quot;&gt;알리바바, AI 중심 사업 재편에 따라 지난해 직원 34% 감축&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208171&quot;&gt;퍼플렉시티, AI 브라우저 ‘코멧’ 기업용·모바일용으로 확장&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208163&quot;&gt;베이조스의 블루 오리진, 우주 데이터센터용 위성 5만2000기 발사 예정&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=208164&quot;&gt;미국, AI 칩 중국 밀수 혐의로 슈퍼마이크로 창립자 등 3명 기소&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4147944/%ec%83%9d%ec%84%b1%ed%98%95-ui-%ec%97%94%ed%84%b0%ed%94%84%eb%9d%bc%ec%9d%b4%ec%a6%88-%ea%b0%9c%eb%b0%9c%ec%9d%98-%ec%8b%9c%ea%b0%84-%ea%b3%b5%ec%8b%9d%ec%9d%84-%eb%b0%94%ea%be%b8%eb%8b%a4.html&quot;&gt;생성형 UI, 엔터프라이즈 개발의 시간 공식을 바꾸다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4147363/%eb%a0%88%ec%9d%b4%ec%a0%80-%ec%97%86%eb%8a%94-%ea%b4%91-%ec%bc%80%ec%9d%b4%eb%b8%94-ai-%eb%8d%b0%ec%9d%b4%ed%84%b0%ec%84%bc%ed%84%b0-%eb%84%a4%ed%8a%b8%ec%9b%8c%ed%81%ac-%ed%95%b4.html&quot;&gt;“레이저 없는 광 케이블” AI 데이터센터 네트워크 해법으로 주목&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27709&quot;&gt;Super Micro 주가, 공동창업자의 25억 달러 규모 AI 칩 밀수 혐의 기소 후 25% 급락&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27706&quot;&gt;Andrej Karpathy가 말하는 코드 에이전트, AutoResearch, 그리고 AI의 루피(Loopy) 시대 [유튜브]&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27703&quot;&gt;Noq: n0의 새로운 Rust 기반 QUIC 구현체&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27700&quot;&gt;풀 리퀘스트는 죽었다, 풀 리퀘스트 만세&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;
</description>
				<pubDate>Sat, 21 Mar 2026 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2026/03/21/weekly-dev-links-2026w12/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2026/03/21/weekly-dev-links-2026w12/</guid>
			</item>
		
			<item>
				<title>주간 테크/개발 뉴스 #2026 3/8 ~ 3/14</title>
				        
        <description>&lt;h2 id=&quot;ai&quot;&gt;AI&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27495&quot;&gt;일론 머스크, AI 코딩 제품 부진으로 xAI 공동 창업자들을 추가 퇴출&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27489&quot;&gt;Opus 4.6 및 Sonnet 4.6에서 1M 컨텍스트 일반 제공 시작&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27479&quot;&gt;LLM을 컴퓨터로 만들 수 있을까? — 트랜스포머 안에서 직접 프로그램을 실행하는 방법&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27476&quot;&gt;CodeSpeak - 코틀린 창시자의 새 언어: 영어 대신 명세(spec)로 LLM과 대화하기&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3655&quot;&gt;코딩 에이전트 여럿 쓰게 해주는 오케스트레이터 도구 3가지&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3653&quot;&gt;page-agent — 코드 한 줄로 웹페이지에 AI 에이전트 추가하는 법&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3646&quot;&gt;AI 에이전트 정복: 규칙, 스킬, 커맨드, 서브 에이전트 활용 전략&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207830&quot;&gt;MS, ‘코파일럿’에 건강 도우미 기능 추가…맞춤형 의료 정보 경쟁에 합류&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4144042/%ec%97%90%ec%9d%b4%ec%a0%84%ed%8a%b8%ed%98%95-%ec%bd%94%eb%94%a9%ec%9d%84-%ea%b1%b0%eb%b6%80%ed%95%98%eb%8a%94-%ea%b0%9c%eb%b0%9c%ec%9e%90%ec%97%90-%eb%8c%80%ed%95%9c-%ec%95%88%ed%83%80%ea%b9%8c.html&quot;&gt;에이전트 기반 코딩을 거부하는 개발자에 대한 안타까움&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4144007/ai-%ec%8b%9c%ec%9e%a5%ec%9d%80-%ec%84%b1%ec%9e%a5-%ec%a4%91%eb%a7%88%ec%9d%b4%ed%81%ac%eb%a1%9c%ec%86%8c%ed%94%84%ed%8a%b8%eb%a7%8c-%ec%98%88%ec%99%b8.html&quot;&gt;AI 시장은 성장 중…마이크로소프트만 예외?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4142740/%ec%97%90%ec%9d%b4%ec%a0%84%ed%8a%b8%eb%a5%bc-%ec%9c%84%ed%95%9c-%ec%bd%94%eb%94%a9%ec%9d%80-%eb%94%b0%eb%b6%84%ed%95%b4%ec%95%bc-%ed%95%9c%eb%8b%a4.html&quot;&gt;에이전트를 위한 코딩은 따분해야 한다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4142728/%ec%98%a4%ed%94%88ai%ec%9d%98-%ec%bd%94%eb%8d%b1%ec%8a%a4-%ec%8b%9c%ed%81%90%eb%a6%ac%ed%8b%b0-%ed%95%9c-%eb%8b%ac%ea%b0%84-%ea%b3%a0%ec%9c%84%ed%97%98-%ec%b7%a8%ec%95%bd%ec%a0%90-1%eb%a7%8c-1000.html&quot;&gt;오픈AI의 코덱스 시큐리티, 한 달간 고위험 취약점 1만 1,000건 발견&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;backend&quot;&gt;Backend&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27498&quot;&gt;Show GN: 한글로 된 짤을 찾을 수 있는, 짤봇 API 와 CLI 를 공유합니다.&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27483&quot;&gt;CanIRun.ai — 내 컴퓨터에서 AI 모델을 실행할 수 있을까?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4144724/%ec%84%9c%eb%b2%84-%ec%82%ac%ec%9d%b4%eb%93%9c%ec%9d%b8%ea%b0%80-%ed%81%b4%eb%9d%bc%ec%9d%b4%ec%96%b8%ed%8a%b8-%ec%82%ac%ec%9d%b4%eb%93%9c%ec%9d%b8%ea%b0%80%ed%98%84%eb%8c%80-%ec%9b%b9.html&quot;&gt;서버 사이드인가, 클라이언트 사이드인가…현대 웹 아키텍처의 해법&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4144699/%ed%81%b4%eb%a1%9c%eb%93%9c-%ec%86%8c%eb%84%b7%ec%9c%bc%eb%a1%9c-%ec%bd%94%eb%93%9c-%ec%9d%b4%ec%82%ac%ed%95%98%ea%b8%b0-%ed%8c%8c%ec%9d%b4%ec%8d%ac%ec%97%90%ec%84%9c-%eb%9f%ac%ec%8a%a4%ed%8a%b8.html&quot;&gt;클로드 소넷으로 코드 이사하기 : 파이썬에서 러스트까지&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;infracloud&quot;&gt;Infra/Cloud&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27494&quot;&gt;ARM64 Linux 기기용 Chrome 출시&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27493&quot;&gt;NanoClaw를 Docker 샌드박스에서 실행하기&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27490&quot;&gt;S3 버킷스쿼팅이 (드디어) 사라졌다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207876&quot;&gt;아마존, 하이퍼스케일러 중 처음으로 세레브라스 ‘추론 칩’ 채택&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4143413/ai-%ec%a0%84%eb%ac%b8-%eb%84%a4%ec%98%a4%ed%81%b4%eb%9d%bc%ec%9a%b0%eb%93%9c%eb%a5%bc-%eb%a9%80%ed%8b%b0%ed%81%b4%eb%9d%bc%ec%9a%b0%eb%93%9c%ec%9d%98-%ec%9d%bc%eb%b6%80%eb%a1%9c-%ec%9a%b4%ec%98%81.html&quot;&gt;AI 전문 네오클라우드를 멀티클라우드의 일부로 운영해야 하는 이유&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;tools&quot;&gt;Tools&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27469&quot;&gt;가장 저렴한 MacBook에서 빅데이터 처리하기&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3654&quot;&gt;AI 시대 콘텐츠 생존 전략: GEO를 위한 SIFT프레임워크&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;github-trending&quot;&gt;GitHub Trending&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/666ghj/MiroFish&quot;&gt;666ghj/MiroFish&lt;/a&gt;&lt;br /&gt;MiroFish는 다중 AI 에이전트 기반의 예측 엔진으로, 뉴스·정책·금융 신호 등 현실 데이터를 시드로 입력하면 독립적 인격과 장기 기억을 가진 수천 개의 에이전트가 상호작용하는 고충실도 디지털 세계를 자동 구축하여 미래 시나리오를 시뮬레이션한다. GraphRAG 기반 지식 그래프 구축, 시계열 기억 동적 업데이트, OASIS 시뮬레이션 엔진을 활용하며, 자연어로 예측 요구를 기술하면 상세 보고서와 상호작용 가능한 시뮬레이션 환경을 반환한다. 여론 추이 예측, 소설 결말 추론, 금융 시나리오 분석 등 다양한 도메인에 범용 적용 가능하다는 점에서 기존 단일 모델 예측과 차별화된다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/msitarzewski/agency-agents&quot;&gt;msitarzewski/agency-agents&lt;/a&gt;&lt;br /&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;agency-agents&lt;/code&gt;는 Claude Code, Cursor, Aider 등 다양한 AI 코딩 도구에서 사용할 수 있는 전문 분야별 AI 에이전트 페르소나 컬렉션으로, 프론트엔드 개발자부터 DevOps, UX 리서처, 브랜드 가디언까지 수십 개의 역할별 프롬프트 템플릿을 제공한다. 각 에이전트는 단순한 프롬프트가 아니라 고유한 성격, 워크플로우, 구체적인 산출물 정의, 성공 지표까지 포함하여 실무에 바로 투입 가능한 수준으로 설계되어 있다. Reddit 커뮤니티에서 시작해 지속적으로 발전 중이며, 멀티 툴 통합 스크립트를 통해 Cursor, Windsurf, Copilot 등 주요 AI 코딩 도구에 원클릭 설치가…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/microsoft/BitNet&quot;&gt;microsoft/BitNet&lt;/a&gt;&lt;br /&gt;BitNet은 Microsoft가 개발한 1-bit LLM(1.58-bit) 전용 추론 프레임워크로, llama.cpp 기반 위에 최적화된 커널을 구현하여 CPU와 GPU에서 손실 없는 고속 추론을 지원한다. ARM CPU에서 최대 5.07x, x86 CPU에서 최대 6.17x의 속도 향상과 함께 에너지 소비를 최대 82.2%까지 절감하며, 100B 파라미터 모델도 단일 CPU에서 사람의 읽기 속도(5-7 tokens/sec)로 실행할 수 있어 로컬 디바이스에서의 LLM 구동 가능성을 크게 확장한다. 가중치를 1.58비트({-1, 0, 1})로 극단적으로 양자화하면서도 성능을 유지하는 접근 방식은 LLM의 메모리·전력…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/NousResearch/hermes-agent&quot;&gt;NousResearch/hermes-agent&lt;/a&gt;&lt;br /&gt;Hermes Agent는 Nous Research가 만든 자기 개선형 AI 에이전트로, 경험에서 skill을 자동 생성하고 사용 중 스스로 개선하며, 세션 간 메모리와 사용자 모델링을 통해 지속적으로 학습하는 closed learning loop를 내장한 점이 핵심이다. OpenRouter, OpenAI 등 200개 이상의 LLM을 코드 변경 없이 전환할 수 있고, Telegram·Discord·Slack 등 멀티 플랫폼 메시징 게이트웨이와 cron 스케줄링, subagent 병렬 실행을 지원하여 단순 CLI 도구를 넘어 상시 운영 가능한 에이전트 인프라를 제공한다. Docker·SSH·Modal·Daytona 등…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/promptfoo/promptfoo&quot;&gt;promptfoo/promptfoo&lt;/a&gt;&lt;br /&gt;promptfoo는 LLM 애플리케이션의 프롬프트와 모델 출력을 자동으로 평가(eval)하고, red teaming을 통해 보안 취약점을 탐지할 수 있는 오픈소스 CLI/라이브러리다. OpenAI, Anthropic, Ollama 등 다양한 LLM 프로바이더를 side-by-side로 비교할 수 있고, CI/CD 파이프라인에 통합하여 품질과 보안 검증을 자동화할 수 있다. 모든 평가가 로컬에서 실행되어 프롬프트 데이터가 외부로 유출되지 않으며, 프로덕션 환경 1,000만+ 사용자 규모에서 검증된 점이 주목할 만하다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/666ghj/BettaFish&quot;&gt;666ghj/BettaFish&lt;/a&gt;&lt;br /&gt;BettaFish(微舆)는 Multi-Agent 기반의 여론 분석 시스템으로, 사용자가 대화형으로 분석 요청을 하면 국내외 30여 개 소셜 미디어 플랫폼의 게시글과 댓글을 자동으로 수집·분석하여 인터랙티브 HTML 보고서를 생성한다. Query Agent, Media Agent, Insight Agent, Report Agent 등 전문화된 Agent들이 “포럼” 토론 메커니즘을 통해 협업하며, 단순 LLM 의존이 아닌 fine-tuned 모델과 통계 모델을 결합한 복합 분석 엔진과 동영상·구조화 데이터 카드 등 멀티모달 처리 능력이 특징이다. 순수 Python 모듈 구조로 경량화·확장성이 뛰어나 Agent 도구와…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/virattt/ai-hedge-fund&quot;&gt;virattt/ai-hedge-fund&lt;/a&gt;&lt;br /&gt;AI 헤지펀드를 시뮬레이션하는 교육용 프로젝트로, Warren Buffett·Charlie Munger·Cathie Wood 등 12명의 유명 투자자 스타일을 모방한 AI 에이전트와 밸류에이션·센티먼트·기술적 분석 등 기능별 에이전트가 협업하여 종목 매매 판단을 내리는 멀티 에이전트 시스템이다. Poetry 기반 CLI와 웹 UI를 모두 지원하며, OpenAI·Anthropic·Groq·DeepSeek 등 다양한 LLM은 물론 Ollama를 통한 로컬 모델 실행과 백테스팅 기능까지 갖추고 있다. 실제 매매는 수행하지 않지만, AI 에이전트 협업 아키텍처와 투자 전략 모델링의 구체적인 구현 사례로서 학습·연구 목적으로…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/fishaudio/fish-speech&quot;&gt;fishaudio/fish-speech&lt;/a&gt;&lt;br /&gt;Fish Audio S2는 1,000만 시간 이상의 오디오와 약 50개 언어로 학습된 오픈소스 TTS 시스템으로, Dual-Autoregressive 아키텍처와 GRPO 기반 강화학습 정렬을 결합하여 Seed-TTS Eval 등 주요 벤치마크에서 클로즈드소스 모델을 포함한 전체 1위를 달성했다. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[whisper]&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;[super happy]&lt;/code&gt; 같은 자연어 태그를 텍스트 내에 삽입해 단어 수준의 감정·운율 제어가 가능하며, SGLang 서빙을 통해 단일 H200 GPU에서 RTF 0.195, 첫 오디오 출력까지 약 100ms의 프로덕션급 스트리밍 성능을 제공한다. 오픈소스임에도 상용 수준의 품질과 다국어 지원…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/volcengine/OpenViking&quot;&gt;volcengine/OpenViking&lt;/a&gt;&lt;br /&gt;OpenViking은 ByteDance(Volcengine)가 공개한 AI Agent 전용 Context Database로, 기존 RAG의 단편적 vector 저장 방식 대신 파일시스템 패러다임을 채택해 Agent의 memory, resource, skill을 통합 관리한다. L0/L1/L2 3계층 구조로 context를 필요 시점에 로딩해 token 소비를 줄이고, 디렉토리 재귀 검색과 시각화된 retrieval 경로를 통해 검색 정확도와 디버깅 가시성을 크게 개선했다. Python, Rust CLI, Go(AGFS) 등 다중 언어를 지원하며 OpenAI·Anthropic·DeepSeek 등 LiteLLM 기반…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/GoogleCloudPlatform/generative-ai&quot;&gt;GoogleCloudPlatform/generative-ai&lt;/a&gt;&lt;br /&gt;Google Cloud의 Vertex AI 플랫폼을 활용한 생성형 AI 개발을 위한 공식 샘플 저장소로, Gemini, Imagen, Chirp 등 Google의 최신 AI 모델들을 실습할 수 있는 notebook, 코드 샘플, 샘플 앱을 체계적으로 제공한다. 텍스트 생성부터 이미지 생성/편집, 음성 처리, RAG, 엔터프라이즈 검색까지 생성형 AI의 주요 활용 시나리오를 폭넓게 다루며, Agent Development Kit(ADK) 샘플과 Agent Starter Pack 등 프로덕션 수준의 AI 에이전트 개발 템플릿도 연계되어 있다. Google Cloud 기반으로 생성형 AI를 도입하려는 개발자에게 환경…&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;etc&quot;&gt;Etc&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3652&quot;&gt;바이브 코딩으로 만든 앱, 글로벌 시장에서 팔리기까지&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3649&quot;&gt;OpenClaw가 보여준 로컬 실행 아키텍처의 전환점&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3648&quot;&gt;기획자가 직접 99개의 서비스를 만들며 배운 것들&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3647&quot;&gt;12분 49초 만에 한 달치 기획이 나왔다: 콘텐츠 AX 실험기&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3643&quot;&gt;클릭 한 번으로 디자인 시스템 가져오는 ‘MiroMiro’&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3642&quot;&gt;마케팅 없이 요약 AI 하나로 ARR 100만 달러 만든 비결&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3639&quot;&gt;사랑받는 AI의 비밀: 구글 AX 가이드와 실무 예제&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3637&quot;&gt;AI 시대에도 브라우저는 Chrome만 써야 해요?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207877&quot;&gt;알리바바, 중국의 ‘오픈클로’ 열풍 타고 전용 앱 출시&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207872&quot;&gt;‘CPU’가 AI 핵심으로 떠올라…엔비디아, GTC서 ‘CPU 서버’ 공개할 듯&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4144644/%ec%95%84%ed%8b%80%eb%9d%bc%ec%8b%9c%ec%95%88-ai-%ed%88%ac%ec%9e%90-%ed%99%95%eb%8c%80-%ec%9c%84%ed%95%b4-1600%eb%aa%85-%ea%b0%90%ec%9b%90.html&quot;&gt;아틀라시안, AI 투자 확대 위해 1,600명 감원&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4144057/%ec%95%a4%ed%8a%b8%eb%a1%9c%ed%94%bd-ai-%ec%82%ac%ed%9a%8c%c2%b7%ea%b2%bd%ec%a0%9c-%ec%98%81%ed%96%a5-%ec%97%b0%ea%b5%ac%ed%95%98%eb%8a%94-%ec%8b%b1%ed%81%ac%ed%83%b1%ed%81%ac-%ec%84%a4%eb%a6%bd.html&quot;&gt;앤트로픽, AI 사회·경제 영향 연구하는 싱크탱크 설립&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4144024/%eb%a7%a5%eb%b6%81-%eb%84%a4%ec%98%a4-%eb%a6%ac%eb%b7%b0-99%eb%a7%8c%ec%9b%90%ec%9c%bc%eb%a1%9c-%ec%8b%9c%ec%9e%91%ed%95%98%eb%8a%94-%eb%a7%a5.html&quot;&gt;맥북 네오 리뷰 : 99만원으로 시작하는 맥&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27500&quot;&gt;Instagram에서 종단간 암호화된 메시징은 5월 8일 이후 더 이상 지원되지 않음&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Sat, 14 Mar 2026 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2026/03/14/weekly-dev-links-2026w11_v2/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2026/03/14/weekly-dev-links-2026w11_v2/</guid>
			</item>
		
			<item>
				<title>주간 테크/개발 뉴스 #2026 3/1 ~ 3/7</title>
				        
        <description>&lt;h2 id=&quot;ai&quot;&gt;AI&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27280&quot;&gt;Claude Code에 가장 적합한 프로그래밍 언어는?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27277&quot;&gt;Show GN: 바이브코딩 자율주행 FSD&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27276&quot;&gt;AI가 일자리를 빼앗고 있을까? 데이터가 말하는 진짜는&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27274&quot;&gt;Anthropic, 새로운 Slack을 만들어 주세요&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27273&quot;&gt;OpenAI, Codex를 오픈소스 개발자에게 지원&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27272&quot;&gt;파이어폭스 보안을 강화하기 위한 Anthropic–Mozilla 협력&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27268&quot;&gt;Anthropic, 미 전쟁부와의 관계 현황&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3644&quot;&gt;[릴리즈 노트] AI가 직접 컴퓨터 조작, 오픈AI GPT-5.4 출시&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3640&quot;&gt;앤트로픽이 공식 오픈한 무료 강의 플랫폼 — Anthropic Courses&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3638&quot;&gt;VLM, 눈 달린 LLM을 만나보자!&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207663&quot;&gt;앤트로픽, ‘클로드’ 기반 소프트웨어 마켓플레이스 공개&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207662&quot;&gt;오픈AI, 에이전트 보안 도구 ‘코덱스 시큐리티’ 출시&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207623&quot;&gt;오픈AI, 사용자 말 끊는 문제 해결할 ‘양방향’ 오디오 모델 개발 중&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207631&quot;&gt;오픈AI, ‘챗GPT’ 쇼핑 결제 계획 축소…여행사 주가는 ‘껑충’&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4141538/ai%ec%97%90-%ec%8b%9c%eb%8b%ac%eb%a6%b0%eb%8b%a4-%ec%a6%9d%ed%9b%84%ea%b5%b0-%ec%96%91%ec%82%b0%ed%95%98%eb%8a%94-%ec%83%88%eb%a1%9c%ec%9a%b4-%eb%b6%88%ec%95%88%ec%9d%98-%ec%8b%9c.html&quot;&gt;“AI에 시달린다” 증후군 양산하는 새로운 불안의 시대&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4141454/%ec%97%90%ec%9d%b4%ec%a0%84%ed%8a%b8%eb%a5%bc-%ec%9c%84%ed%95%9c-%ed%95%80%ec%98%b5%ec%8a%a4-%eb%a3%a8%ed%94%84-%ec%a0%9c%ed%95%9c-%ed%88%b4-%ed%98%b8%ec%b6%9c-%ec%83%81%ed%95%9c-%ec%97%90.html&quot;&gt;에이전트를 위한 핀옵스 : 루프 제한, 툴 호출 상한, 에이전틱 SaaS의 새로운 단위 경제&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4141450/%eb%a7%88%eb%a6%ac%ec%95%84db%ec%97%90%ec%84%9c-%ec%a3%bc%eb%aa%a9%ed%95%a0-%eb%a7%8c%ed%95%9c-%ec%83%88-%ea%b8%b0%eb%8a%a5-5%ea%b0%80%ec%a7%80.html&quot;&gt;마리아DB에서 주목할 만한 새 기능 5가지&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4141444/%ed%83%90%ec%a7%80-%ed%9a%8c%ed%94%bc%ec%97%90-%ec%a7%91%ec%a4%91%ed%95%98%eb%8a%94-%ea%b3%b5%ea%b2%a9%ec%9e%90%eb%93%a4ai%ec%99%80-%ea%b3%b5%ea%b8%89%eb%a7%9d-%ea%b3%b5%ea%b2%a9-%ea%b2%b0.html&quot;&gt;탐지 회피에 집중하는 공격자들…AI와 공급망 공격 결합&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4140859/%ec%98%a4%ed%94%88ai-%ec%9c%88%eb%8f%84%ec%9a%b0%ec%9a%a9-ai-%ec%bd%94%eb%94%a9-%ec%95%b1-%ec%b6%9c%ec%8b%9c.html&quot;&gt;오픈AI, 윈도우용 AI 코딩 앱 출시&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4140216/%eb%84%a4%ec%9d%b4%ec%b2%98-%eb%a9%94%eb%94%94%ec%8b%a0-%ea%b2%8c%ec%9e%ac-%ec%97%b0%ea%b5%ac-%ec%b1%97gpt-%ec%8b%a0%ea%b7%9c-%ea%b1%b4%ea%b0%95-%ec%84%9c%eb%b9%84%ec%8a%a4%ec%97%90-%ea%b2%bd.html&quot;&gt;네이처 메디신 게재 연구, 챗GPT 신규 건강 서비스에 경고&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4140175/%ec%b1%97gpt%c2%b7%ec%a0%9c%eb%af%b8%eb%82%98%ec%9d%b4%ec%9d%98-%ea%b8%b0%ec%96%b5-%ec%b0%bd%ea%b3%a0-%ec%a7%81%ec%a0%91-%ec%97%b4%ec%96%b4%eb%b3%b4%eb%8a%94-%ed%94%84%eb%a1%ac%ed%94%84%ed%8a%b8.html&quot;&gt;챗GPT·제미나이의 기억 창고, 직접 열어보는 프롬프트&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;backend&quot;&gt;Backend&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27281&quot;&gt;Show GN: [Marklas] Markdown &amp;lt;-&amp;gt; Atlassian Document Format(ADF) 양방향 변환기&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27264&quot;&gt;PigeonPod - 어디서나 YouTube를 청취할 수 있는 팟캐스트형 스트리밍 도구&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3632&quot;&gt;JavaScript 날짜 버그, Temporal API로 정리합니다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4140335/%eb%8b%a4%ec%8b%9c-%eb%ac%b8%ec%a0%9c%eb%8a%94-%eb%84%a4%ed%8a%b8%ec%9b%8c%ed%82%b9-ai-%ec%8b%9c%eb%8c%80-%ea%b0%9c%eb%b0%9c%ec%9e%90%ea%b0%80-%ec%9d%b8%ed%94%84%eb%9d%bc%ec%97%90.html&quot;&gt;“다시 문제는 네트워킹” AI 시대 개발자가 인프라에 신경 써야 하는 이유&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;infracloud&quot;&gt;Infra/Cloud&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207669&quot;&gt;이란, 아마존 데이터센터 공격…“AI 시대 새로운 군사적 타깃 부각”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207666&quot;&gt;MS 이어 아마존·구글도 “국방 비관련 분야는 앤트로픽 모델 계속 지원”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207633&quot;&gt;베슬AI, ‘GTC’서 차세대 GPU 클라우드 서비스 기술 공개&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;tools&quot;&gt;Tools&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27282&quot;&gt;Show GN: SlideNav - Google Slides 슬라이드 링크 이동 후 뒤로가기 문제를 해결하는 Chrome extension&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3641&quot;&gt;Vercel react-best-practices 스킬로 코드 리뷰 자동화하기&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3630&quot;&gt;클로드코드 사용량 세계 1위 개발자의 AI 코딩 워크플로우&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207665&quot;&gt;“지메일부터 시트까지 명령어 하나로”… 구글, 인간-에이전트 겸용 ‘워크스페이스 CLI’ 공개&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/3550449/%ed%95%98%ec%9d%b4%eb%b8%8c%eb%a6%ac%eb%93%9c-%ec%97%85%eb%ac%b4%ed%99%98%ea%b2%bd%ea%b3%bc-%eb%8c%80%ed%87%b4%ec%a7%81-%ec%8b%9c%eb%8c%80%ec%9d%98-%ed%95%b4%ea%b2%b0-%eb%b0%a9%ec%95%88-%eb%94%94.html&quot;&gt;디지털 직원 경험의 재정의…AI 시대 IT 운영의 중심으로&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;github-trending&quot;&gt;GitHub Trending&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/ruvnet/RuView&quot;&gt;ruvnet/RuView&lt;/a&gt;&lt;br /&gt;Star ruvnet / RuView π RuView: WiFi DensePose turns commodity WiFi signals into real-time human pose estimation, vital sign monitoring, and presence detection — all without a single pixel of video.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/moeru-ai/airi&quot;&gt;moeru-ai/airi&lt;/a&gt;&lt;br /&gt;Star moeru-ai / airi 💖🧸 Self hosted, you-owned Grok Companion, a container of souls of waifu, cyber livings to bring them into our worlds, wishing to achieve Neuro-sama’s altitude. Capable of realtime voice chat…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/alibaba/OpenSandbox&quot;&gt;alibaba/OpenSandbox&lt;/a&gt;&lt;br /&gt;Star alibaba / OpenSandbox OpenSandbox is a general-purpose sandbox platform for AI applications, offering multi-language SDKs, unified sandbox APIs, and Docker/Kubernetes runtimes for scenarios like Coding Agents, GUI…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/bytedance/deer-flow&quot;&gt;bytedance/deer-flow&lt;/a&gt;&lt;br /&gt;Star bytedance / deer-flow An open-source SuperAgent harness that researches, codes, and creates. With the help of sandboxes, memories, tools, skills and subagents, it handles different levels of tasks that could take…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/abhigyanpatwari/GitNexus&quot;&gt;abhigyanpatwari/GitNexus&lt;/a&gt;&lt;br /&gt;Sponsor Star abhigyanpatwari / GitNexus GitNexus: The Zero-Server Code Intelligence Engine - GitNexus is a client-side knowledge graph creator that runs entirely in your browser. Drop in a GitHub repo or ZIP file, and…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/shareAI-lab/learn-claude-code&quot;&gt;shareAI-lab/learn-claude-code&lt;/a&gt;&lt;br /&gt;Star shareAI-lab / learn-claude-code Bash is all you need - A nano Claude Code–like agent, built from 0 to 1&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/superset-sh/superset&quot;&gt;superset-sh/superset&lt;/a&gt;&lt;br /&gt;Star superset-sh / superset IDE for the AI Agents Era - Run an army of Claude Code, Codex, etc. on your machine&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/D4Vinci/Scrapling&quot;&gt;D4Vinci/Scrapling&lt;/a&gt;&lt;br /&gt;Sponsor Star D4Vinci / Scrapling 🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/CodebuffAI/codebuff&quot;&gt;CodebuffAI/codebuff&lt;/a&gt;&lt;br /&gt;Star CodebuffAI / codebuff Generate code from the terminal!&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/anthropics/prompt-eng-interactive-tutorial&quot;&gt;anthropics/prompt-eng-interactive-tutorial&lt;/a&gt;&lt;br /&gt;Star anthropics / prompt-eng-interactive-tutorial Anthropic’s Interactive Prompt Engineering Tutorial&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/ruvnet&quot;&gt;GitHub Developer: rUv (@ruvnet)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/njbrake&quot;&gt;GitHub Developer: Nathan Brake (@njbrake)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/kim-em&quot;&gt;GitHub Developer: Kim Morrison (@kim-em)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/teng-lin&quot;&gt;GitHub Developer: Teng Lin (@teng-lin)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/mxsm&quot;&gt;GitHub Developer: mxsm (@mxsm)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/andimarafioti&quot;&gt;GitHub Developer: Andrés Marafioti (@andimarafioti)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/Klocman&quot;&gt;GitHub Developer: Marcin Szeniak (@Klocman)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/bradygaster&quot;&gt;GitHub Developer: Brady Gaster (@bradygaster)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/mostlygeek&quot;&gt;GitHub Developer: Benson Wong (@mostlygeek)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/zhayujie&quot;&gt;GitHub Developer: zhayujie (@zhayujie)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;etc&quot;&gt;Etc&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3645&quot;&gt;IT 지식으로 지금 당장 “부업”을 시작하는 3가지 방법&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207673&quot;&gt;아모데이, 트럼프 비난 보도에 사과…“하지만 법적 대응은 불가피”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207672&quot;&gt;[AI 이슈트렌드] 2NE1 마약 논란·중동 전쟁 등에 관심 집중&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4141469/%eb%a7%88%ec%9d%b4%ed%81%ac%eb%a1%9c%ec%86%8c%ed%94%84%ed%8a%b8%ea%b0%80-m5-%eb%a7%a5%eb%b6%81%ec%9d%84-%ea%b2%bd%ea%b3%84%ed%95%b4%ec%95%bc-%ed%95%98%eb%8a%94-%ec%9d%b4%ec%9c%a0.html&quot;&gt;마이크로소프트가 M5 맥북을 경계해야 하는 이유&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Sat, 07 Mar 2026 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2026/03/07/weekly-dev-links-2026w10_v2/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2026/03/07/weekly-dev-links-2026w10_v2/</guid>
			</item>
		
			<item>
				<title>주간 테크/개발 뉴스 #2026 2/22 ~ 2/28</title>
				        
        <description>&lt;h2 id=&quot;ai&quot;&gt;AI&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27079&quot;&gt;OpenAI, 미 국방부와 비공개 네트워크 내 모델 배포에 합의&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27078&quot;&gt;OpenAI, 사상 최대 규모 중 하나인 1,100억 달러 민간 자금 조달 완료&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27074&quot;&gt;Anthropic, 국방부 장관 Pete Hegseth의 공급망 위험 지정에 대한 공식 성명 발표&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27073&quot;&gt;보조 에이전트 최적화(AAO): SEO의 다음 진화 단계&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27071&quot;&gt;Anthropic, 오픈소스 유지관리자에게 무료 Claude Max 20x 제공&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3629&quot;&gt;렌트어휴먼(RentAHuman), AI한테 고용당하겠다는 50만 명이 모였다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3628&quot;&gt;덕질하다 만든 웹사이트에 49만 명이 방문했다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3620&quot;&gt;3개월간 AI에 2,348만 원 쓰고도 10배 더 늘리려는 이유&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207389&quot;&gt;[2월27일] GPT-5.2·클로드·제미나이, 워게임서 핵무기 사용 확률 95%&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207354&quot;&gt;‘나노 바나나 2’ 매개변수 18억개…모바일에서 500밀리초 미만 지연 시간&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207369&quot;&gt;코딩 에이전트 실패 이유로 지나치게 상세한 ‘AGENTS.md’ 파일 지목&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4137712/%ea%b3%a7-%ec%b6%94%ea%b0%80%eb%90%a0-%ec%95%88%eb%93%9c%eb%a1%9c%ec%9d%b4%eb%93%9c-%ec%8b%a0%ea%b8%b0%eb%8a%a5-%ec%a7%80%ea%b8%88-%eb%af%b8%eb%a6%ac-%ec%93%b0%eb%8a%94-%eb%b2%95-3%ea%b0%80%ec%a7%80.html&quot;&gt;곧 추가될 안드로이드 신기능, 지금 미리 쓰는 법 3가지&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4137681/ai-%ec%8a%a4%eb%a7%88%ed%8a%b8-%ea%b8%80%eb%9e%98%ec%8a%a4%ec%97%90-%ec%8f%a0%eb%a6%ac%eb%8a%94-%ec%8b%9c%ec%84%a0vr-%eb%8b%a4%ec%8b%9c-%ec%a0%90%ea%b2%80%eb%8c%80%ec%97%90-%ec%98%a4.html&quot;&gt;AI 스마트 글래스에 쏠리는 시선…VR, 다시 점검대에 오르다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4137660/13%ea%b0%80%ec%a7%80-%ec%83%9d%ec%84%b1%ed%98%95-ai-%ea%b3%b5%ea%b2%a9-%ec%88%98%eb%b2%95-%ea%b8%b0%ec%97%85-%ec%8b%9c%ec%8a%a4%ed%85%9c%ec%9d%84-%eb%85%b8%eb%a6%ac%eb%8a%94-%ec%83%88%eb%a1%9c.html&quot;&gt;’13가지 생성형 AI 공격 수법’ 기업 시스템을 노리는 새로운 위협&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4137002/%ed%81%b4%eb%9d%bc%ec%9a%b0%eb%93%9c-%ec%9a%b4%ec%98%81%ec%9d%98-%ec%83%88-%ec%9d%b8%ed%84%b0%ed%8e%98%ec%9d%b4%ec%8a%a4-mcp-%ec%84%9c%eb%b2%84%eb%a5%bc-%ec%9d%b4%ed%95%b4%ed%95%98%eb%8b%a4.html&quot;&gt;클라우드 운영의 새 인터페이스, MCP 서버를 이해하다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4136313/ai-%ec%97%90%ec%9d%b4%ec%a0%84%ed%8a%b8%ec%99%80-%ec%9e%98%eb%aa%bb%eb%90%9c-%ec%83%9d%ec%82%b0%ec%84%b1-%ec%a7%80%ed%91%9c.html&quot;&gt;AI 에이전트와 잘못된 생산성 지표&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;backend&quot;&gt;Backend&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27080&quot;&gt;JavaScript를 위한 더 나은 Streams API가 필요합니다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4138189/%ec%95%a4%ed%8a%b8%eb%a1%9c%ed%94%bd-%eb%b2%84%ec%85%89%ed%8a%b8-%ec%9d%b8%ec%88%98ai-%ec%97%85%eb%ac%b4-%ec%9e%90%eb%8f%99%ed%99%94-%ea%b0%95%ed%99%94.html&quot;&gt;앤트로픽, 버셉트 인수…AI 업무 자동화 강화&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4138184/%eb%b8%8c%eb%9d%bc%ec%9a%b0%ec%a0%80%ea%b0%80-%ea%b3%a7-%eb%8d%b0%ec%9d%b4%ed%84%b0%eb%b2%a0%ec%9d%b4%ec%8a%a4%eb%a1%9c%ec%bb%ac-%ed%8d%bc%ec%8a%a4%ed%8a%b8%ec%9d%98-%ec%84%b1%ec%88%99.html&quot;&gt;브라우저가 곧 데이터베이스…로컬 퍼스트의 성숙&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4138175/%eb%a7%81%ed%81%ac%eb%93%9c%ec%9d%b8-ai-%ec%8b%9c%eb%8c%80-%eb%a7%9e%ec%b6%b0-%ea%b2%80%ec%a6%9d%eb%90%9c-ai-%ec%97%ad%eb%9f%89-%ec%9d%b8%ec%a6%9d-%eb%8f%84%ec%9e%85.html&quot;&gt;링크드인, AI 시대 맞춰 ‘검증된 AI 역량’ 인증 도입&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4136978/%eb%a9%80%ed%8b%b0%ed%81%b4%eb%9d%bc%ec%9a%b0%eb%93%9c-%eb%b3%b5%ec%9e%a1%ec%84%b1-%ec%83%9d%ec%84%b1%ed%98%95-ai%eb%a1%9c-%eb%8f%8c%ed%8c%8c%ed%95%98%eb%8a%94-7%ea%b0%80%ec%a7%80-%eb%b0%a9%eb%b2%95.html&quot;&gt;멀티클라우드 복잡성, 생성형 AI로 돌파하는 7가지 방법&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;infracloud&quot;&gt;Infra/Cloud&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27081&quot;&gt;TREX - Rust로 만든 PDF 테이블 추출 엔진 (딥러닝으로 정확도 개선)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;tools&quot;&gt;Tools&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27076&quot;&gt;Obsidian Headless sync 오픈베타 시작&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=27066&quot;&gt;prek - Rust로 재개발한 더 나은 pre-commit&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3630&quot;&gt;클로드코드 사용량 세계 1위 개발자의 AI 코딩 워크플로우&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4137690/%ec%98%a8%ec%88%98%eb%a1%9c-%eb%83%89%ea%b0%81-%eb%8d%b0%ec%9d%b4%ed%84%b0%ec%84%bc%ed%84%b0-%eb%83%89%ea%b0%81%ea%b8%b0-%ec%97%86%eb%8a%94-%ec%88%98%eb%9e%ad-%ec%8b%9c%eb%8c%80.html&quot;&gt;“온수로 냉각?” 데이터센터, 냉각기 없는 수랭 시대 열리나&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;etc&quot;&gt;Etc&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3631&quot;&gt;내 머릿속을 통째로 백업할 때 쓰는 3가지 도구&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3627&quot;&gt;분노 주도 개발(RDD)로 시작하는 사이드 프로젝트&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3626&quot;&gt;Supabase는 요즘 왜 그렇게 인기가 많을까?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3625&quot;&gt;AI로 빨리 만드는 팀보다 ‘덜 흔들리는’ 팀이 이기는 이유&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3624&quot;&gt;AI 시대의 디자이너를 위한 글쓰기&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3623&quot;&gt;AI 없으면 결정 못 하는 리더십, 주도권은 어디로?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207408&quot;&gt;오픈AI, 캐나다 총기 사건에 ‘시스템 결함’ 시인… “신고 체계 전면 강화”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207407&quot;&gt;“미 국방부, 정부 기관 경고 무시하고 머스크의 ‘그록’ 기밀 작전에 도입”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207409&quot;&gt;“AI 도입으로 직원 절반 감원”…트위터 창립자의 강수에 논쟁 본격화&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207414&quot;&gt;오픈AI, 앤트로픽 퇴출 직후 미 국방부와 계약…“안전 방침은 고수”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207388&quot;&gt;구글, 비엔지니어까지 AI 사용 의무화…인사평가에도 반영&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207406&quot;&gt;오픈AI, 195조 투자 유치로 몸값 1053조 달성…아마존과 대형 파트너십&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Sat, 28 Feb 2026 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2026/02/28/weekly-dev-links-2026w09/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2026/02/28/weekly-dev-links-2026w09/</guid>
			</item>
		
			<item>
				<title>주간 테크/개발 뉴스 #2026 2/15 ~ 2/21</title>
				        
        <description>&lt;h2 id=&quot;ai&quot;&gt;AI&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26871&quot;&gt;Claude Code 해커톤 수상자 명단에 개발자가 한 명도 없습니다.&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26868&quot;&gt;Anthropic, Claude Code에 보안 취약점 스캔 기능 출시 (리서치 프리뷰)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26865&quot;&gt;클로드 코드, 사이버보안 기능 추가&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26856&quot;&gt;FreeFlow - 음성 받아쓰기 앱 오픈소스&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26846&quot;&gt;Show GN: 한국 뉴스로 매일 ‘집단 무의식’을 기록하는 프로젝트를 만들었습니다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3619&quot;&gt;[릴리즈 노트] 업무용 에이전트 최적화, 구글 제미나이 3.1 프로(Gemini 3.1 Pro) 출시&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3618&quot;&gt;구글 14년차 엔지니어가 공유한, 직군 불문 교훈 14가지&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3615&quot;&gt;[릴리즈 노트] 사람만큼 컴퓨터를 다루는 LLM, Claude Sonnet 4.6&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207033&quot;&gt;앤트로픽, ‘클로드 코드 시큐리티’ 공개…사이버보안 주가 급락 유발&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207039&quot;&gt;“너는 신의 대리인”…‘챗GPT’ 대화 후 정신병 진단 대학생, 오픈AI 고소&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207018&quot;&gt;‘오픈클로’ 확산으로 토큰 사용량 두배로 증가…‘H100’ 임대료도 반등&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4134990/r%ea%b3%bc-%eb%b0%94%ec%9d%b4%ed%83%88vitals%eb%a1%9c-%ec%b5%9c%ec%a0%81%ec%9d%98-llm%ec%9d%84-%ec%84%a0%ed%83%9d%ed%95%98%eb%8a%94-%eb%b0%a9%eb%b2%95.html&quot;&gt;R과 바이탈(vitals)로 최적의 LLM을 선택하는 방법&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4134973/24%ec%8b%9c%ea%b0%84-%ec%9e%91%eb%8f%99%ed%95%98%eb%8a%94-%ec%9e%90%ec%9c%a8-ai%ec%98%a4%ed%94%88%ed%81%b4%eb%a1%9c-%ec%84%a4%ec%b9%98%eb%8a%94-%ec%8b%a0%ec%a4%91%ed%95%b4%ec%95%bc.html&quot;&gt;24시간 작동하는 자율 AI…오픈클로 설치는 신중해야&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4134928/%ec%98%a4%ed%94%88%ed%81%b4%eb%a1%9c%ec%84%9c-ssrf%c2%b7%ec%9d%b8%ec%a6%9d-%ec%9a%b0%ed%9a%8c-%eb%93%b1-%ec%a4%91%c2%b7%ea%b3%a0%ec%9c%84%ed%97%98-%ec%b7%a8%ec%95%bd%ec%a0%90-6%ea%b1%b4-%ed%99%95.html&quot;&gt;오픈클로서 SSRF·인증 우회 등 중·고위험 취약점 6건 확인&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4134239/ai-%ec%8b%9c%ec%8a%a4%ed%85%9c%ec%9d%98-%ec%84%b1%ed%8c%a8%eb%a5%bc-%ea%b0%80%eb%a5%b4%eb%8a%94-%ec%bb%a8%ed%85%8d%ec%8a%a4%ed%8a%b8-%ec%84%a4%ea%b3%84-%ec%a0%84%eb%9e%b5.html&quot;&gt;AI 시스템의 성패를 가르는 컨텍스트 설계 전략&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;backend&quot;&gt;Backend&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26854&quot;&gt;ISBN의 함정&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3616&quot;&gt;바이브 코딩 초보자가 꼭 알아야 할 API 개념 정리&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;infracloud&quot;&gt;Infra/Cloud&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4133983/%ed%81%b4%eb%9d%bc%ec%9a%b0%eb%93%9c-%ec%9e%a5%ec%95%a0%ea%b0%80-%ec%9d%bc%ec%83%81%ec%9c%bc%eb%a1%9c-%ea%b5%b3%ec%96%b4%ec%a7%80%eb%8a%94-%ec%9d%b4%ec%9c%a0.html&quot;&gt;클라우드 장애는 왜 일상이 될까&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;tools&quot;&gt;Tools&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26873&quot;&gt;Dependabot을 끄자&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26863&quot;&gt;CIA 유출 문서에서 찾은 Git 브랜치 정리 한 줄 명령어&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;etc&quot;&gt;Etc&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26872&quot;&gt;Opus 4.6, 사람 기준 14.5시간짜리 문제를 푼다는 것의 의미 (METR Time Horizon)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26869&quot;&gt;Show GN: 카카오톡 업데이트 되돌리기 게임&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3614&quot;&gt;잔디·슬랙·팀즈·네이버웍스·플로우, AI 기능 어디까지 왔나&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3613&quot;&gt;육아하며 바이브 코딩으로 만든 앱, 앱스토어 1위까지&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3612&quot;&gt;꿈의 AI ‘OpenClaw’, 네이버·카카오는 왜 금지했을까?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3611&quot;&gt;최근 3개월 흐름으로 읽는 2026 바이브 코딩 로드맵&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3600&quot;&gt;AI로 코드는 빨리 나오는데, 왜 출시는 그대로일까?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3598&quot;&gt;우리가 기능이 아닌 문제에 집중해야 하는 이유&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207041&quot;&gt;“AI 못 쓰면 2~3년 내 하위 계층 전락”…‘AI 양극화’ 주장에 찬반 엇갈려&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207040&quot;&gt;메타·앤트로픽도 ‘재귀적 자기 개선’ 언급…“AI가 AI 만드는 시대 도래”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207036&quot;&gt;구글, TPU 확대 위해 ‘네오 클라우드’ 스타트업에 1400억 투자 논의&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207030&quot;&gt;엔비디아, 오픈AI 1000억달러 파트너십을 300억달러 투자로 대체&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207032&quot;&gt;메타, AI 비용 부담으로 직원 주식 보상 2년 연속 삭감&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207035&quot;&gt;﻿[AI 이슈트렌드] 충주맨 사직·윤석열 무기징역 등 파장 확산&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=207031&quot;&gt;“오픈AI의 첫번째 장치는 스마트 스피커…스마트 안경·램프도 개발 중”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4134981/%eb%b3%b4%ec%a6%9d-%ec%88%98%eb%a6%ac-%ec%83%81%eb%8b%b4%eb%8f%84-ai-%ec%9d%91%eb%8c%80%ec%9d%b8%ed%85%94-%ec%a7%80%ec%9b%90-%ec%b2%b4%ea%b3%84-%ec%a0%84%ed%99%98.html&quot;&gt;보증 수리 상담도 AI 응대…인텔 지원 체계 전환&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4134969/ai-%ea%b0%9c%eb%b0%9c-%ec%8b%9c%eb%8c%80-%eb%b3%b4%ec%95%88-%ec%86%8c%ed%94%84%ed%8a%b8%ec%9b%a8%ec%96%b4-%ec%97%94%ec%a7%80%eb%8b%88%ec%96%b4%eb%a5%bc-%ed%82%a4%ec%9a%b0%eb%8a%94-%ec%83%88%eb%a1%9c.html&quot;&gt;AI 개발 시대, 보안 소프트웨어 엔지니어를 키우는 새로운 패러다임&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4134953/%eb%8d%b0%ec%9d%b4%ed%84%b0%eb%a5%bc-1%eb%a7%8c-%eb%85%84-%eb%b3%b4%ec%a1%b4%ed%95%98%eb%8a%94-%ec%9c%a0%eb%a6%ac-%ec%a0%80%ec%9e%a5-%ea%b8%b0%ec%88%a0-%eb%93%b1%ec%9e%a5.html&quot;&gt;데이터를 1만 년 보존하는 유리 저장 기술 등장&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4134883/%ec%9c%88%eb%8f%84%ec%9a%b0-11-%ec%9d%b8%ed%84%b0%eb%84%b7-%ec%86%8d%eb%8f%84-%ed%85%8c%ec%8a%a4%ed%8a%b8-%ea%b8%b0%eb%8a%a5-%eb%8f%84%ec%9e%85.html&quot;&gt;윈도우 11, 인터넷 속도 테스트 기능 도입&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4134246/%ea%b3%b5%ec%9e%a5%ea%b3%bc-%eb%a7%a4%ec%9e%a5%ec%9c%bc%eb%a1%9c-%ed%99%95%ec%82%b0%eb%90%98%eb%8a%94-%ed%94%bc%ec%a7%80%ec%bb%ac-ai-%ec%a4%80%eb%b9%84-%ec%97%86%eb%8a%94-%eb%8f%84%ec%9e%85%ec%9d%80.html&quot;&gt;공장과 매장으로 확산되는 피지컬 AI, 준비 없는 도입은 위험&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;
</description>
				<pubDate>Sat, 21 Feb 2026 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2026/02/21/weekly-dev-links-2026w08/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2026/02/21/weekly-dev-links-2026w08/</guid>
			</item>
		
			<item>
				<title>주간 테크/개발 뉴스 #2026 2/8 ~ 2/14</title>
				        
        <description>&lt;h2 id=&quot;ai&quot;&gt;AI&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26684&quot;&gt;GPT-5.2가 이론물리학에서 새로운 결과를 도출&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26682&quot;&gt;OpenAI가 미션에서 ‘안전하게(safely)’라는 단어를 삭제함&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26679&quot;&gt;Spotify, &quot;AI 덕분에 최고 개발자들이 12월 이후 코드 한 줄도 작성하지 않았다&quot;고 발표&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26668&quot;&gt;Cloudrouter - Claude Code/Codex가 클라우드 VM·GPU를 띄우게 만드는 스킬&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26665&quot;&gt;Anthropic, 시리즈 G 투자 라운드에서 300억 달러 조달하며 포스트밸류 3,800억 달러 달성&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26661&quot;&gt;Show GN: HAMPTER : LLM에 MCP로 연결되는 하드웨어를 위한 프레임워크&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26656&quot;&gt;16일간 AI와 함께 만든 AI 모니터링 도구 이야기&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3608&quot;&gt;로버트 마틴: AI 시대, LLM이 개발자를 대체할 수 없는 이유&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3606&quot;&gt;닌텐도 못 하게 했더니 직접 게임 만든 10살 아들(개발자 아빠의 관찰기)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3605&quot;&gt;Cursor로 설계부터 마무리까지, 레거시 마이그레이션 해봤습니다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3604&quot;&gt;검색 말고 ‘리서치’ 잘하는 사람이 쓰는 도구 7가지&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3603&quot;&gt;AI가 선을 넘기 시작할 때, 기업은 뭘 해야 할까?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3601&quot;&gt;프로그래머로서 이렇게 뒤처진 느낌은 처음입니다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=206715&quot;&gt;[2월11일] 바이브 코딩 1년째, 서서히 드러나는 ‘AI 피로’&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=206846&quot;&gt;[2월13일] 설 연휴 앞둔 중국 AI의 물량 공세…남은 것은 딥시크와 ‘GPT-5.3’&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=206868&quot;&gt;엔비디아, 추론 메모리 사용 8배까지 줄이는 기술 공개&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=206857&quot;&gt;“2.9만원으로 챗GPT 프로 사용” 화제….’챗GPT 포 카카오’ 유의 사항은&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=206855&quot;&gt;베슬AI, 연 매출 3.4배 성장…”AI 인프라 솔루션 수요 확대”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4131823/ai-%ec%86%8d%eb%8f%84%eb%a1%9c-%ec%9e%ac%ed%8e%b8%eb%90%98%eb%8a%94-%ec%86%8c%ed%94%84%ed%8a%b8%ec%9b%a8%ec%96%b4-%ec%82%b0%ec%97%85-%ea%b0%9c%eb%b0%9c%ec%9e%90%ec%9d%98-%eb%af%b8%eb%9e%98%eb%8a%94.html&quot;&gt;AI 속도로 재편되는 소프트웨어 산업, 개발자의 미래는 어디로&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4131782/llm-%ec%97%85%eb%8d%b0%ec%9d%b4%ed%8a%b8%ec%9d%98-%ea%b3%a0%ec%a7%88%eb%b3%91-%ec%b9%98%eb%aa%85%ec%a0%81-%eb%a7%9d%ea%b0%81-sdft%eb%a1%9c-%eb%8f%8c%ed%8c%8c-%ec%8b%9c%eb%8f%84.html&quot;&gt;LLM 업데이트의 고질병 ‘치명적 망각’, SDFT로 돌파 시도&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4131184/%ec%84%b8%ec%9d%bc%ec%a6%88%ed%8f%ac%ec%8a%a4-%ed%81%b4%eb%a1%9c%eb%93%9c%ec%99%80-%ec%96%91%eb%b0%a9%ed%96%a5-%ed%99%95%ec%9e%a5-%ea%b8%b0%eb%8a%a5-%ea%b3%b5%ea%b0%9c-%ec%8a%ac.html&quot;&gt;세일즈포스, 클로드와 양방향 확장 기능 공개 “슬랙·에이전트포스360 연동 지원”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4131110/lm-%ec%8a%a4%ed%8a%9c%eb%94%94%ec%98%a4-%ec%b2%ab%ec%9d%b8%ec%83%81%eb%a1%9c%ec%bb%ac-pc%ec%97%90%ec%84%9c-llm-%ec%8b%a4%ed%96%89%ed%95%b4-%eb%b3%b4%eb%8b%88.html&quot;&gt;LM 스튜디오 첫인상…로컬 PC에서 LLM 실행해 보니&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4130537/ms-ai-%eb%b3%b4%ec%95%88-%eb%b3%b4%ea%b3%a0%ec%84%9c-%eb%b0%9c%ed%91%9c%c2%b7%c2%b7%c2%b7%ec%97%90%ec%9d%b4%ec%a0%84%ed%8a%b8-%eb%8f%84%ec%9e%85%ec%9d%84-%ec%9c%84%ed%95%9c-%eb%b3%b4%ec%95%88.html&quot;&gt;MS, AI 보안 보고서 발표···에이전트 도입을 위한 보안 원칙 제시&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4130520/%ec%8b%a0%ea%b8%b0%eb%8a%a5-%ec%83%9d%ea%b2%bc%eb%8b%a4%eb%8a%94%eb%8d%b0-%ec%9e%91%eb%8f%99%ec%9d%80-%ec%95%88-%eb%90%98%ea%b3%a0%ec%bd%94%ed%8c%8c%ec%9d%bc%eb%9f%bf%ec%97%90-%ec%a7%80.html&quot;&gt;신기능 생겼다는데 작동은 안 되고…코파일럿에 지친 이유&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26655&quot;&gt;65줄 텍스트가 AI 코딩을 바꿨다? 하루 400 스타 받은 파일의 정체&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26654&quot;&gt;OpenAI의 사내 데이터 에이전트 들여다 보기&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;backend&quot;&gt;Backend&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26686&quot;&gt;Show GN: 일주일만에 새로운 엑셀 라이브러리를 만들다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26672&quot;&gt;Rari - Rust-Powered React 프레임워크&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26671&quot;&gt;디스코드가 익명성을 죽여버렸다&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4131083/%eb%b0%98%ec%9d%91%ed%98%95-it%ec%9d%98-%ec%a2%85%eb%a7%90-10%eb%85%84-%ed%9b%84-%ed%81%b4%eb%9d%bc%ec%9a%b0%eb%93%9c-%ec%84%b1%eb%8a%a5%ec%9d%84-%ec%9e%ac%ec%a0%95%ec%9d%98%ed%95%98%eb%8a%94.html&quot;&gt;“반응형 IT의 종말” 10년 후 클라우드 성능을 재정의하는 예측 엔지니어링&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4131084/%eb%a7%88%ec%9d%b4%ed%81%ac%eb%a1%9c%ec%86%8c%ed%94%84%ed%8a%b8-%ec%9c%88%eb%8f%84%ec%9a%b0-%eb%b3%b4%ec%95%88-%ea%b8%b0%eb%b3%b8%ea%b0%92-%eb%b0%94%ea%be%bc%eb%8b%a4%ec%95%b1-%ea%b6%8c.html&quot;&gt;마이크로소프트, 윈도우 보안 기본값 바꾼다…앱 권한 ‘동의 우선’ 전환&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;infracloud&quot;&gt;Infra/Cloud&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26674&quot;&gt;aws-doctor - AWS 비용 진단, 유휴 리소스 탐지 및 클라우드 지출 최적화&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://news.hada.io/topic?id=26669&quot;&gt;Zed 에디터, 그래픽스 라이브러리를 Blade에서 wgpu로 전환&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;tools&quot;&gt;Tools&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3609&quot;&gt;OpenClaw 창시자, “나는 내가 읽지 않은 코드를 배포합니다.”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3602&quot;&gt;비개발자지만 5일 만에 크롬 확장 프로그램 출시했습니다 (with Cursor)&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4130461/ram-%eb%8c%80%eb%9e%80-%ec%86%8d-%ec%82%b4%ec%95%84%eb%82%a8%ea%b8%b0-%ec%a7%80%ea%b8%88-%ec%82%ac%eb%8f%84-%ea%b4%9c%ec%b0%ae%ec%9d%80-pc-%eb%b6%80%ed%92%88%ec%9d%80-%eb%94%b0%eb%a1%9c-%ec%9e%88.html&quot;&gt;RAM 대란 속 살아남기 “지금 사도 괜찮은 PC 부품은 따로 있다”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;etc&quot;&gt;Etc&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3610&quot;&gt;개발자 6인, 비개발자 4인의 클로드 코드 실전 사례집&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=206890&quot;&gt;‘8000만 뷰’ 화제의 글 “AI 변곡점 맞아…거대한 변화 다가와”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=206889&quot;&gt;xAI 대규모 인원 이탈 원인은…“압박·논란·스페이스X 통합 결합”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=206877&quot;&gt;”창작자 고유 스킬로 수익 창출”…데이븐AI, 생성 AI ‘연출 로직’ 코드화&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=206866&quot;&gt;엔비디아 “블랙웰로 추론 비용 최대 10배까지 절감”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=206883&quot;&gt;오픈AI, 미 국방부 ‘음성 기반 드론 군집’ 개발 참여…“번역 역할로 제한”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=206888&quot;&gt;앤트로픽, 미국 대학 코딩 교육에 합류…‘실전 AI 역량이 취업 경쟁력’”&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=206884&quot;&gt;바이두, 설 연휴 앞두고 7억 사용자 검색 앱에 ‘오픈클로’ 추가&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=206882&quot;&gt;[AI 이슈트렌드] 동계올림픽 화제 속 정은우 사망·황희찬 갑질 등 눈길&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4131901/%ea%b8%b0%ec%bb%b4-a8-%eb%a6%ac%eb%b7%b0-%ec%bd%a4%ed%8c%a9%ed%8a%b8-%eb%94%94%ec%9e%90%ec%9d%b8%ec%97%90-%eb%8b%b4%ec%9d%80-%eb%9d%bc%ec%9d%b4%ec%a0%a0-7-%eb%af%b8%eb%8b%88-pc%ec%9d%98-%ec%a0%80.html&quot;&gt;기컴 A8 리뷰 / 콤팩트 디자인에 담은 라이젠 7 미니 PC의 저력&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4131771/ai%eb%a1%9c-%ec%9a%94%ec%95%bd-%eb%b2%84%ed%8a%bc%ec%97%90-%ec%88%a8%ec%9d%80-ai-%ec%b6%94%ec%b2%9c-%ec%98%a4%ec%97%bc-%eb%a7%88%ec%9d%b4%ed%81%ac%eb%a1%9c%ec%86%8c%ed%94%84.html&quot;&gt;‘AI로 요약’ 버튼에 숨은 AI 추천 오염…마이크로소프트, AI 편향 주입 경고&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4131751/%ec%83%88-pc%eb%a5%bc-%ec%bc%9c%ec%9e%90%eb%a7%88%ec%9e%90-%eb%b0%98%eb%93%9c%ec%8b%9c-%ed%99%95%ec%9d%b8%ed%95%98%eb%8a%94-%ed%95%b5%ec%8b%ac-%eb%b3%b4%ec%95%88-%ec%84%a4%ec%a0%95-4%ea%b0%80%ec%a7%80.html&quot;&gt;새 PC를 켜자마자 반드시 확인하는 핵심 보안 설정 4가지&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2026/02/14/weekly-dev-links-2026w07/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2026/02/14/weekly-dev-links-2026w07/</guid>
			</item>
		
			<item>
				<title>주간 테크/개발 뉴스 #2026 2/1 ~ 2/7</title>
				        
        <description>&lt;h2 id=&quot;ai&quot;&gt;AI&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://haskellforall.com/2026/02/beyond-agentic-coding&quot;&gt;Beyond agentic coding&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3595&quot;&gt;[릴리즈 노트] Opus 4.6에 대한 오픈AI의 대답, GPT-5.3-Codex&lt;/a&gt;
&lt;br /&gt;Codex의 가능성을 한층 더 넓혀 줄 새로운 모델 GPT-5.3-Codex를 소개합니다. 이는 지금까지 나온 것중 가장 뛰어난 자율 코딩 모델입니다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3594&quot;&gt;[릴리즈 노트] 코딩 더 잘 하는 Claude Opus 4.6 등장&lt;/a&gt;
&lt;br /&gt;새로운 Claude Opus 4.6은 이전 모델보다 코딩 능력이 향상되었습니다. 더 신중하게 계획을 세우고, 자율적으로 수행하는 작업을 더 오래 이어갈 수 있으며, 큰 코드 기반에서도 더 안정적으로 동작합니다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3591&quot;&gt;“절대 추천하지 않는다”는 Moltbook, 무슨 일 있었나&lt;/a&gt;
&lt;br /&gt;역할별로 AI를 세팅해주는 Anthropic의 플러그인 11종이 오픈소스로 공개됐습니다. AI 에이전트 160만 개가 모여 종교를 만들고 비밀 대화를 논의하는 소셜 네트워크 Moltbook도 화제고요.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.blog/ai-and-ml/generative-ai/continuous-ai-in-practice-what-developers-can-automate-today-with-agentic-ci&quot;&gt;Continuous AI in practice: What developers can automate today with agentic CI&lt;/a&gt;
&lt;br /&gt;Continuous AI를 추론이 필요한 작업을 위해 저장소에서 작동하는 백그라운드 에이전트로 생각하십시오. 실제로 지속적인 AI 게시물: 에이전트 CI를 사용하여 오늘날 개발자가 자동화할 수 있는 것 GitHub 블로그에 처음 게재되었습니다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.blog/news-insights/company-news/pick-your-agent-use-claude-and-codex-on-agent-hq&quot;&gt;Pick your agent: Use Claude and Codex on Agent HQ&lt;/a&gt;
&lt;br /&gt;Claude by Anthropic 및 OpenAI Codex는 이제 Copilot Pro+ 또는 Copilot Enterprise 구독을 통해 GitHub 및 VS Code에서 공개 미리 보기로 제공됩니다. 오늘 알아야 할 사항과 시작하는 방법은 다음과 같습니다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://developers.googleblog.com/introducing-the-developer-knowledge-api-and-mcp-server&quot;&gt;Introducing the Developer Knowledge API and MCP Server&lt;/a&gt;
&lt;br /&gt;Google은 Developer Knowledge API 및 MCP 서버를 공개 미리보기로 출시합니다. 이 새로운 도구 세트는 AI 보조자 및 에이전트 플랫폼이 Firebase, Google Cloud, Android 등에서 최신 문서를 검색하고 가져올 수 있는 표준적이고 기계가 읽을 수 있는 방법을 제공합니다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://developers.googleblog.com/beyond-the-chatbot-a-blueprint-for-trustable-ai&quot;&gt;Beyond the Chatbot: A Blueprint for Trustable AI&lt;/a&gt;
&lt;br /&gt;Thunderhill Raceway Park에서는 Google 개발자 전문가(GDE) 팀이 새로운 ‘신뢰할 수 있는 AI 프레임워크’를 테스트했습니다. GCP, Gemini, Antigravity를 사용하여 고속 경주를 에이전트 아키텍처의 마스터 클래스로 전환한 방법은 다음과 같습니다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://developers.googleblog.com/tailor-gemini-cli-to-your-workflow-with-hooks&quot;&gt;Tailor Gemini CLI to your workflow with hooks&lt;/a&gt;
&lt;br /&gt;새로운 Gemini CLI 후크(v0.26.0+)를 사용하면 에이전트 루프를 맞춤 설정할 수 있습니다. 워크플로우의 사전 정의된 지점에서 실행되는 사용자 정의 스크립트를 사용하여 컨텍스트를 추가하고, 정책을 시행하고, 비밀을 차단하세요.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.infoq.com/news/2026/02/cloudflare-moltworker&quot;&gt;Cloudflare Demonstrates Moltworker, Bringing Self-Hosted AI Agents to the Edge&lt;/a&gt;
&lt;br /&gt;Cloudflare는 개발자 플랫폼에서 자체 호스팅 개인 AI 에이전트인 Moltbot을 실행하기 위한 오픈 소스 솔루션인 Moltworker를 도입하여 Mac mini와 같은 로컬 하드웨어가 필요하지 않게 되었습니다. Clawdbot에서 브랜드가 변경된 Moltbot은 사용자 제어를 유지하면서 AI 모델, 브라우저 및 타사 도구를 통합하여 채팅 애플리케이션에서 개인 비서 역할을 합니다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.infoq.com/news/2026/02/google-gemini-agentic-vision&quot;&gt;Google Supercharges Gemini 3 Flash with Agentic Vision&lt;/a&gt;
&lt;br /&gt;Google은 시각적 추론과 코드 실행을 결합하여 “시각적 증거에 대한 답변”을 제공하는 Gemini 3 Flash에 에이전트 비전을 추가했습니다. Google에 따르면 이는 정확성을 향상시킬 뿐만 아니라 더 중요하게는 완전히 새로운 AI 기반 행동을 열어줍니다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.infoq.com/news/2026/02/datadog-google-llm-observability&quot;&gt;Datadog Integrates Google Agent Development Kit into LLM Observability Tools&lt;/a&gt;
&lt;br /&gt;Datadog은 최근 자사의 LLM Observability 플랫폼이 Google의 ADK(에이전트 개발 키트)로 구축된 애플리케이션에 대한 자동 계측을 제공하여 AI 기반 에이전트 시스템의 동작, 성능, 비용 및 안전성에 대한 심층적인 가시성을 제공한다고 발표했습니다. 크레이그 리시&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://techcrunch.com/2026/02/06/super-bowl-60-ai-ads-svedka-anthropic-brands-commercials&quot;&gt;From Svedka to Anthropic, brands make bold plays with AI in Super Bowl ads&lt;/a&gt;
&lt;br /&gt;Svedka가 제공한 최초의 AI 생성 빅 게임 광고부터 OpenAI를 사용한 Anthropic의 쇠고기까지 Super Bowl LX의 가장 큰 광고는 다음과 같습니다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://techcrunch.com/2026/02/06/it-just-got-easier-for-claude-to-check-in-on-your-wordpress-site&quot;&gt;It just got easier for Claude to check in on your WordPress site&lt;/a&gt;
&lt;br /&gt;WordPress 사용자는 이제 Claude를 활용하여 웹 트래픽을 분석하거나 기타 내부 사이트 지표에 대한 정보를 찾을 수 있습니다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://techcrunch.com/2026/02/06/maybe-ai-agents-can-be-lawyers-after-all&quot;&gt;Maybe AI agents can be lawyers after all&lt;/a&gt;
&lt;br /&gt;이번 주 Opus 4.6 출시로 에이전트 AI 순위표가 뒤흔들렸습니다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.reddit.com/r/ClaudeCode/comments/1qxu7qp/im_printing_paper_receipts_after_every_claude&quot;&gt;I’m printing paper receipts after every Claude Code session, and you can too&lt;/a&gt;
&lt;br /&gt;이것은 제가 가장 좋아하는 창의적인 사이드 프로젝트 중 하나였습니다(그리고 Opus 4.6에 딱 맞춰서). 나는 중고 영수증 프린터를 집어 Claude Code의 ‘SessionEnd’ 후크에 연결했습니다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.reddit.com/r/ClaudeCode/comments/1qxvobt/ive_used_ai_to_write_100_of_my_code_for_1_year_as&quot;&gt;I’ve used AI to write 100% of my code for 1+ year as an engineer. 13 no-bs lessons&lt;/a&gt;
&lt;br /&gt;1년 전 저는 “100% AI 생성 코드로 얻은 12가지 강의”를 게시하여 조회수 100만 회 이상을 기록했습니다. 이러한 포인트 중 일부는 Agent.md, claude.md, 계획 모드 및 context7 MCP로 발전했습니다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.reddit.com/r/ClaudeCode/comments/1qxazv9/codex_53_is_better_than_46_opus&quot;&gt;Codex 5.3 is better than 4.6 Opus&lt;/a&gt;
&lt;br /&gt;나는 $200 Max 요금제를 가지고 있어요. 나는 그것을 몇 달 동안 즐겼습니다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.reddit.com/r/ClaudeCode/comments/1qwcg0g/my_personal_cc_setup_not_a_joke&quot;&gt;My personal CC setup [not a joke]&lt;/a&gt;
&lt;br /&gt;옵시디언 + 클로드 코드 + 가스 타운 + 위스퍼 플로우를 합치면 어떻게 될까요? 오픈 소스 @ github.com/voicetreelab/voicetree입니다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.reddit.com/r/ClaudeCode/comments/1qwrz01/opus_46_lobotomized&quot;&gt;Opus 4.6 lobotomized&lt;/a&gt;
&lt;br /&gt;Opus 4.6은 오늘날 더 나쁘게 느껴집니다. Anthropic이 이를 양자화했습니까?&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.blog/ai-and-ml/github-copilot/how-to-maximize-github-copilots-agentic-capabilities&quot;&gt;How to maximize GitHub Copilot’s agentic capabilities&lt;/a&gt;
&lt;br /&gt;Copilot의 실제 애플리케이션을 설계하고 확장하기 위한 수석 엔지니어 가이드입니다. GitHub Copilot의 에이전트 기능을 최대화하는 방법 게시물이 GitHub 블로그에 처음 게재되었습니다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=206547&quot;&gt;엔비디아, ‘블랙웰’ 기술 문제 최근 해결…‘GPT-5.3-코덱스’가 증거&lt;/a&gt;
&lt;br /&gt;엔비디아의 ‘블랙웰(Blackwell)’이 기술적인 복잡성 때문에 초기 도입 과정에서 주요 고객사들의 골칫거리였던 것으로 알려졌다. 이러한 기술적 난제는 최근 개선판 공급으로 해결 국면에 접어든 것으로 보이는데, 그 증거가 오픈AI의 최신 코딩 모델 ‘GPT-5.3-코덱스’라는 설명이다.디 인포메이션은 5일(현지시간) 엔비디아와 메타 직원 등을 인용, 오픈AI와 메타 등 엔비디아의 고객들이…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4127778/2026%eb%85%84-%ec%a3%bc%eb%aa%a9%ed%95%b4%ec%95%bc-%ed%95%a0-%eb%84%a4%ed%8a%b8%ec%9b%8c%ed%82%b9-%ed%8a%b8%eb%a0%8c%eb%93%9c-8%ea%b0%80%ec%a7%80.html&quot;&gt;2026년 주목해야 할 네트워킹 트렌드 8가지&lt;/a&gt;
&lt;br /&gt;AI가 네트워킹 산업에 미치는 영향은 이제 외면하기 어려울 정도로 커졌다. 상상하기 힘들 만큼 빠른 속도로 AI는 전문 데이터 과학자만 다루던 백엔드 데이터 처리 기술에서 시작해, 이제는 LLM을 기반으로 한 생성형 AI를 통해 거의 모든 사용자와 네트워크 전문가가 직접 활용할 수 있는 수준으로 발전했다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://alperenkeles.com/posts/llms-could-be-but-shouldnt-be-compilers&quot;&gt;LLMs could be, but shouldn’t be compilers&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;backend&quot;&gt;Backend&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://techcrunch.com/2026/02/06/benchmark-raises-225m-in-special-funds-to-double-down-on-cerebras&quot;&gt;Benchmark raises $225M in special funds to double down on Cerebras&lt;/a&gt;
&lt;br /&gt;Benchmark Capital은 2016년부터 Nvidia 경쟁사에 투자자로 참여해 왔습니다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.blog/news-insights/octoverse/what-the-fastest-growing-tools-reveal-about-how-software-is-being-built&quot;&gt;What the fastest-growing tools reveal about how software is being built&lt;/a&gt;
&lt;br /&gt;가장 빠르게 성장하고 있는 언어는 무엇이며 그 이유는 무엇입니까? 사람들이 가장 관심을 갖는 프로젝트는 무엇일까요?&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4128468/%ec%8a%88%ed%8d%bc%eb%b3%bc%ea%b8%89-%ed%8a%b8%eb%9e%98%ed%94%bd%ec%9d%84-%ea%b2%ac%eb%94%94%eb%8a%94-nbc%ec%9c%a0%eb%8b%88%eb%b2%84%ec%84%a4%ec%9d%98-%eb%b6%84%ec%82%b0-%ec%8b%9c%ec%8a%a4%ed%85%9c.html&quot;&gt;슈퍼볼급 트래픽을 견디는 NBC유니버설의 분산 시스템 설계 원칙&lt;/a&gt;
&lt;br /&gt;올림픽이나 프리미어리그 경기, 시즌 피날레 등 대형 이벤트의 인프라를 운영할 때면 대부분 시스템이 좀처럼 겪지 않는 썬더링 허드(thundering herd) 문제에 직면한다. 수백만 명의 사용자가 단 3분이라는 짧은 시간 안에 동시에 로그인하고, 콘텐츠를 탐색한 뒤 재생 버튼을 누르기 때문이다.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;infracloud&quot;&gt;Infra/Cloud&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.infoq.com/news/2026/02/cname-rfc-cloudflare-outage&quot;&gt;How CNAME Ordering in RFC Specs Caused Cloudflare 1.1.1.1 Outage&lt;/a&gt;
&lt;br /&gt;“CNAME 또는 A 레코드 중 무엇이 먼저였습니까?”라는 제목의 최근 기사에서 Cloudflare는 불분명한 RFC 사양으로 인해 인기 있는 Cloudflare의 1.1.1.1 서비스가 어떻게 중단되었는지 설명합니다. Cloudflare는 레코드 순서에 관한 이전 DNS 표준의 파손 및 모호성을 식별한 후 명확한 사양을 제안합니다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;tools&quot;&gt;Tools&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.infoq.com/news/2026/02/linkedin-redesigns-sast-pipeline&quot;&gt;LinkedIn Leverages GitHub Actions, CodeQL, and Semgrep for Code Scanning&lt;/a&gt;
&lt;br /&gt;LinkedIn은 GitHub Actions 및 사용자 지정 워크플로를 사용하여 정적 애플리케이션 보안 테스트(SAST) 파이프라인을 재구축하여 수천 개의 저장소에서 일관되고 시행 가능한 코드 검색을 가능하게 했습니다. 재설계는 회사의 Shift-Left 전략을 지원하는 동시에 보안 적용 범위, 개발자 워크플로 및 관찰 가능성을 향상시킵니다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://techcrunch.com/2026/02/07/new-york-lawmakers-propose-a-three-year-pause-on-new-data-centers&quot;&gt;New York lawmakers propose a three-year pause on new data centers&lt;/a&gt;
&lt;br /&gt;법안의 전망은 불확실하지만, 뉴욕은 적어도 새로운 데이터 센터 건설 중단을 고려하는 여섯 번째 주입니다.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;etc&quot;&gt;Etc&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://susam.net/twenty-five-years-of-computing.html&quot;&gt;Stories From 25 Years of Software Development&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://bsky.app/profile/fullmoon.id/post/3meadfaulhk2s&quot;&gt;(Bsky thread) “This turns the maintainer into an unwitting vibe coder”&lt;/a&gt;
&lt;br /&gt;(이와 같이 Bluesky 스레드를 표시/게시하는 더 좋은 방법이 있거나 Lobsters에 올리면 안 되는 경우 Lmk) 댓글&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://font.subf.dev/en&quot;&gt;Maple Mono: Open source monospace font&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://addisoncrump.info/research/a-horrible-conclusion&quot;&gt;A Horrible Conclusion&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3596&quot;&gt;이제 더는 PPT 만들기 싫은 사람들을 위한 6가지 툴&lt;/a&gt;
&lt;br /&gt;슬라이드는 시키는 사람들이 으레 하는 말마따나 “거 장표 몇 장 만드는 일”이 아닙니다. 조사부터 스토리 기획, 디자인까지 이어지는 긴 작업이죠.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/3590&quot;&gt;한 달 만에 20만 다운로드, 전 세계 홀린 한국 개발자&lt;/a&gt;
&lt;br /&gt;공개 한 달 만에 깃허브 스타 2만 개를 돌파하며 글로벌 빅테크의 주목을 받은 ‘오 마이 오픈코드(OMO)’ 개발자 김연규 님의 인터뷰입니다. 6개월간의 독학 실험을 통해 탄생한 이 도구는 ‘시지프스’라 불리는 멀티 에이전트 시스템을 활용해 사람이 짠 것 같은 자연스러운 코드를 구현합니다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://developers.googleblog.com/easy-functiongemma-finetuning-with-tunix-on-google-tpus&quot;&gt;Easy FunctionGemma finetuning with Tunix on Google TPUs&lt;/a&gt;
&lt;br /&gt;FunctionGemma 모델의 미세 조정은 Google TPU의 경량 JAX 기반 Tunix 라이브러리를 사용하여 빠르고 쉽게 이루어집니다. 여기서는 감독된 미세 조정을 위해 LoRA를 사용하여 설명하는 프로세스입니다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://developers.googleblog.com/litert-the-universal-framework-for-on-device-ai&quot;&gt;LiteRT: The Universal Framework for On-Device AI&lt;/a&gt;
&lt;br /&gt;TFLite의 진화인 LiteRT는 이제 온디바이스 AI를 위한 범용 프레임워크입니다. Gemma와 같은 모델을 위해 최대 1.4배 더 빠른 GPU, 새로운 NPU 지원 및 간소화된 GenAI 배포를 제공합니다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=206548&quot;&gt;알트먼 “우리는 스타트업에 불과…지나친 공격에 당혹스러워”&lt;/a&gt;
&lt;br /&gt;샘 알트먼 CEO가 최근 오픈AI에 쏟아지는 비평과 비관적인 전망에 대해 불편한 심경을 드러냈다. 그는 오픈AI가 “세상에서 가장 많은 현미경 조사를 받는 스타트업”이라고 묘사했다.알트먼 CEO는 5일(현지시간) AI 동료 ‘프론티어(Frontier)’ 홍보를 위해 TBPN의 데일리 라이브 테크 토크쇼에 출연, 35분간 인터뷰를 진행했다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=206537&quot;&gt;이승준 트웰브랩스 CTO “글로벌한 영상 분석 기술로 ‘소버린 AI’ 실현”&lt;/a&gt;
&lt;br /&gt;“진정한 소버린 AI란 기술을 수출해 세계적으로 인정받는 수준까지 올라가는 것입니다. 트웰브랩스는 해외에서 더 인정받는 기술을 갖췄습니다.”2021년 설립된 트웰브랩스(대표 이재성)는 ‘멀티모달’이나 ‘영상 분석’이 일반에 널리 알려지기 전부터 관련 기술을 연구해 왔다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=206544&quot;&gt;“토네이도·코끼리 등장해도 피할 수 있어”…웨이모, 자율주행용 ‘월드 모델’ 공개&lt;/a&gt;
&lt;br /&gt;구글의 자율주행 자회사 웨이모가 딥마인드의 월드 모델 ‘지니 3(Genie 3)’를 활용해 극단적 돌발 상황까지 재현하는 가상 주행 세계를 구축했다. 실제 도로 데이터의 한계를 넘어 희귀 사고와 예외적 환경을 학습·검증하려는 시도로, 자율주행 서비스의 안전성과 도시 확장 속도를 동시에 끌어올리겠다는 의도에 따른 것이다.웨이모는 6일(현지시간) 초현실적 자율주행 시뮬레이션을 구현하는 차세대…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.aitimes.com/news/articleView.html?idxno=206541&quot;&gt;“머스크, 스페이스X·xAI 초대형 합병으로 부채·법적 리스크 피해”&lt;/a&gt;
&lt;br /&gt;스페이스X가 xAI를 인수하며 기업 가치 1조2500억달러(약 1829조원)에 달하는 초대형 기업을 탄생시킨 데에 대해, 단순한 합병을 넘어 수조원대 부채 상환 부담과 법적 리스크를 동시에 피해 가는 정교한 구조로 계획됐다는 분석이 나왔다.로이터는 5일(현지시간) 일론 머스크 CEO가 스페이스X와 xAI를 완전히 통합하지 않고, xAI를 스페이스X의 100% 자회사로 두는 ‘삼각…&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4128438/fbi%eb%8f%84-%eb%9a%ab%ec%a7%80-%eb%aa%bb%ed%95%9c-%ec%95%84%ec%9d%b4%ed%8f%b0%ec%95%a0%ed%94%8c-%ec%b0%a8%eb%8b%a8-%eb%aa%a8%eb%93%9c-%eb%b3%b4%ec%95%88%ec%84%b1-%ec%9e%85.html&quot;&gt;FBI도 뚫지 못한 아이폰…애플 ‘차단 모드’ 보안성 입증&lt;/a&gt;
&lt;br /&gt;미 연방수사국(FBI)이 애플의 차단 모드(Lockdown Mode)가 어느 정도 수준의 보안을 제공하는지를 몸소 증명했다. 언론인과 기업 경영진, 공직자 등 기밀 정보를 다뤄야 하는 이들에게는 긍정적인 사례로 받아들여질 만한 내용이다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4128409/ai-%ec%97%ac%ed%8c%8c%eb%a1%9c-%eb%8a%a6%ec%96%b4%ec%a7%80%ea%b3%a0-%eb%b9%84%ec%8b%b8%ec%a7%84-%ec%8a%a4%ed%8c%80-%eb%a8%b8%ec%8b%a0%eb%b0%b8%eb%b8%8c%eb%8f%84-%ea%b0%80%ea%b2%a9-%eb%b6%80.html&quot;&gt;AI 여파로 늦어지고 비싸진 스팀 머신…밸브도 가격 부담 직면&lt;/a&gt;
&lt;br /&gt;밸브의 스팀 머신이 예정보다 늦게 출시되고 가격도 오를 전망이다. AI 인프라 확산으로 촉발된 RAM 가격 급등이 직접적인 원인이다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.itworld.co.kr/article/4128387/ai-%ec%9d%b8%ed%94%84%eb%9d%bc-%ed%88%ac%ec%9e%90-%ed%99%95%eb%8c%80%eb%a1%9c-2026%eb%85%84-%ea%b8%b0%ec%97%85-it-%ec%a7%80%ec%b6%9c-6%ec%a1%b0-%eb%8b%ac%eb%9f%ac-%eb%8f%8c%ed%8c%8c-%ec%a0%84%eb%a7%9d.html&quot;&gt;AI 인프라 투자 확대로 2026년 기업 IT 지출 6조 달러 돌파 전망&lt;/a&gt;
&lt;br /&gt;가트너가 2026년 글로벌 IT 지출이 10.8% 성장해 6조 1,500억 달러에 이를 것으로 예상했으며, AI 인프라가 해당 성장의 대부분을 차지할 것이라고 밝혔다. 이번 전망은 AI 거품 현상에 대한 우려가 커지는 상황에서도 지출 확대가 둔화될 기미를 보이지 않고 있음을 보여준다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://gekkio.fi/blog/2026/game-boy-advance-d-pad-capacitor-measurements&quot;&gt;Game Boy Advance d-pad capacitor measurements&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://github.com/mitchellh/vouch&quot;&gt;vouch: a contributor trust management system based on explicit vouches to participate&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://blog.buenzli.dev/flirt-native-backend&quot;&gt;Flirt: The Native Backend&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://nemin.hu/guix-packaging.html&quot;&gt;Adventures in Guix Packaging&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://eljojo.github.io/rememory&quot;&gt;ReMemory - Split a recovery key among friends&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

</description>
				<pubDate>Sat, 07 Feb 2026 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2026/02/07/weekly-dev-links-2026w06/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2026/02/07/weekly-dev-links-2026w06/</guid>
			</item>
		
			<item>
				<title>n8n으로 RSS 피드 자동 수집하고 요약하기</title>
				        
        <description>&lt;p&gt;n8n으로 rss 피드를 수집하고 LLM으로 요약해서 노션 데이터베이스에 등록하는 과정을 정리했다.
흐름은 아래와 같다.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gist.github.com/surinkim/c23706081b1ab524e356d0dca1f39014&quot;&gt;&lt;img src=&quot;/img/2025_06_30/img1.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;노드 수가 많지도 않은데 이런 저런 시행착오로 하루가 걸렸다..&lt;br /&gt;
RSS Read 노드를 매번 쓰지 않고 code와 http requst 노드를 쓰면 여러 개의 피드를 쉽게 가져올 수 있을 것 같다.
LLM 요약은 로컬 LM 스튜디오에서 돌고있는 exaone을 사용했는데 토큰 수를 조정하면 속도도 괜찮다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/2025_06_30/img3.png&quot; alt=&quot;워크플로우&quot; /&gt;&lt;/p&gt;

&lt;p&gt;전체 workflow.json는 아래 gist에서 볼 수 있다.  &lt;br /&gt;
&lt;a href=&quot;https://gist.github.com/surinkim/3bede642d1c70341554f99298d08016c&quot;&gt;workflow.json&lt;/a&gt;&lt;br /&gt;
코드에서 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;your-&lt;/code&gt;로 시작하는 부분을 실제 노션 시크릿 키나 로컬 LM 스튜디오 url로 변경하면 된다.&lt;/p&gt;

&lt;p&gt;노션 데이터베이스는 아래처럼 저장된다. 이제보니 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Source&lt;/code&gt; 필터링이 제대로 안됐네;;&lt;br /&gt;
&lt;img src=&quot;/img/2025_06_30/img4.png&quot; alt=&quot;노션 데이터베이스&quot; /&gt;&lt;/p&gt;

&lt;p&gt;그리고 마지막 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Append a block&lt;/code&gt;으로 노션 페이지에 링크 목록도 md 형식으로 저장된다.&lt;br /&gt;
&lt;img src=&quot;/img/2025_06_30/img5.png&quot; alt=&quot;md 형식 링크 목록&quot; /&gt;&lt;/p&gt;

&lt;p&gt;마지막으로 아래 깃허브 저장소에서 다양한 n8n 워크플로를 참고할 수 있다.&lt;br /&gt;
&lt;a href=&quot;https://github.com/Zie619/n8n-workflows&quot;&gt;github workflow collection&lt;/a&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 30 Jun 2025 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2025/06/30/n8n-llm/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2025/06/30/n8n-llm/</guid>
			</item>
		
			<item>
				<title>Cursor에서 로컬 LLM 사용하기</title>
				        
        <description>&lt;p&gt;cursor는 어떤 LLM을 사용할 지 설정이 가능하다. 그래서 LM studio, ngrok을 활용하면 무료로 로컬 LLM을 사용할 수 있다.
대략 이런 식이다.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gist.github.com/surinkim/627706fa97d6f3fcb1dbc54b7aec0790&quot;&gt;&lt;img src=&quot;/img/2025_03_02/img1.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;먼저, LM Studio에서 사용할 모델을 로딩하고 설정한다. 그리고 ngrok을 통해 cursor에서 접속할 수 있도록 한다.
cursor에서는 앞서 LM Studio에서 로딩한 모델과 ngrok의 서버 주소를 입력한다.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;LM Studio에서 모델 로딩 &amp;amp; 설정&lt;br /&gt;
&lt;img src=&quot;/img/2025_03_02/img2.png&quot; alt=&quot;LM Studio 설정&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;ngrok 설치 &amp;amp; 실행 &lt;br /&gt;
ngrok을 설치하고 실행한다. 포트 번호는 LM Studio에서 설정한 포트 번호를 입력한다.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ngrok http 1234
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
    &lt;p&gt;그러면 아래 화면처럼 나오는데, 여기서 서비스 되는 url을 확인하고 복사한다.
&lt;img src=&quot;/img/2025_03_02/img3.png&quot; alt=&quot;ngrok&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;cursor 설정&lt;br /&gt;
&lt;img src=&quot;/img/2025_03_02/img4.png&quot; alt=&quot;cursor 설정&quot; /&gt;
OpenAI API KEY에는 아무 키나 입력하고 OpenAI Base URL에 위 2번의 서비스 url + /v1을 입력하고 save &amp;amp; verify 한다.
verify할 때 에러가 없어야 한다.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;무료로 LLM을 사용하고 코드 유출 위험을 줄이는 장점은 있지만, 깃허브 코파일럿이나 claude 같은 유료 모델에 비하면 성능은 아쉬울 수 밖에 없다.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;참고: &lt;a href=&quot;https://medium.com/@hyperfox_/run-cursor-ai-for-free-with-open-source-llm-55396c1411b1&quot;&gt;Run Cursor AI for Free with Open-Source LLM&lt;/a&gt;&lt;/p&gt;
</description>
				<pubDate>Sun, 02 Mar 2025 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2025/03/02/cursor_with_local_llm/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2025/03/02/cursor_with_local_llm/</guid>
			</item>
		
			<item>
				<title>(리뷰)삼체</title>
				        
        <description>&lt;h2 id=&quot;삼체&quot;&gt;삼체&lt;/h2&gt;
&lt;h4 id=&quot;ebook-총-3권-류츠신-저-이현아허유영-역&quot;&gt;ebook 총 3권, 류츠신 저, 이현아/허유영 역&lt;/h4&gt;

&lt;p&gt;&lt;a href=&quot;https://www.yes24.com/Product/Goods/121149264&quot;&gt;&lt;img src=&quot;/img/2023_12_23/three-body.png&quot; alt=&quot;01.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;​&lt;br /&gt;
상상력의 한계를 느끼게 한다.&lt;/p&gt;

&lt;p&gt;중국 문화대혁명을 시작으로 한 소설은 끝에 가서는 짐작하기도 어려운 18,906,416년의 시간까지 흘러간다.
공간 역시 마찬가지다. 태양계는 우습게 벗어나 우리 은하를 거쳐 외우주까지 나간다.
2차원과 4차원은 또 어떤가
(장담하는데 3권을 읽고나면 2차원으로 표현된 그림들이 한동안 새롭게 느껴질 것이다!) &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;도대체 마무리를 어떻게 하려고 이러나 하는 궁금증은 총 3권의 마지막 페이지까지 가서 또 하나의 우주를 만나면서 해소 된다. &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;올 여름부터 읽기 시작해서 지금이 12월이니 꽤 오랜시간 동안 출,퇴근길을 지루하지 않게 해줬지만,
때로는 더 졸립게도 만들고 지친 머리를 더 아프게도 했다.
게다가 공간이나 시간 모두 엄청난 스케일을 다루다 보니 안 그래도 평범한 하루가 너무 보잘것 없이 느껴지는 부작용도 있다..&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;하드 SF라는 장르는 처음 읽었는데 복잡한 이론만 나열하는 게 아니라 극적인 사건도 잘 배분되어 읽는 재미가 있었다.
다음에는 테드 창의 소설도 읽어보려고 한다.
그렇지만 바로 읽을 엄두는 안나고 당분간은 지구 안에서 부대끼며 살아가는 사람들의 평범한 얘기를 다룬 책을 읽으면서 마음을 가라앉혀야겠다.&lt;br /&gt;&lt;/p&gt;
</description>
				<pubDate>Sat, 23 Dec 2023 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2023/12/23/three_body/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2023/12/23/three_body/</guid>
			</item>
		
			<item>
				<title>Telegraf에서 Kafka로 지표 전송</title>
				        
        <description>&lt;p&gt;시스템의 CPU, 메모리, 네트워크 상태 등을 Telegraf로 수집하여 Kafka로 보낸다.&lt;br /&gt;
전송된 메시지나 브로커 상태는 Kafka UI로 볼 수 있다. 구성은 대략 아래와 같다.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gist.github.com/surinkim/7880b825b70febceba7017be32364b72&quot;&gt;&lt;img src=&quot;/img/2023_08_27/img1.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
아래는 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker-compose.yml&lt;/code&gt; 구성이다.&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;3.6&apos;&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;services&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;

  &lt;span class=&quot;na&quot;&gt;zookeeper-1&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;confluentinc/cp-zookeeper:7.4.0&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;ports&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;32181:32181&quot;&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;environment&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;ZOOKEEPER_CLIENT_PORT&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;32181&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;ZOOKEEPER_TICK_TIME&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2000&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;volumes&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;zookeeper_data:/var/lib/zookeeper/data&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;zookeeper_logs:/var/lib/zookeeper/logs&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;networks&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;kafka-backend&lt;/span&gt;
 
  &lt;span class=&quot;na&quot;&gt;kafka-1&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;confluentinc/cp-kafka:7.4.0&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;ports&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;9092:9092&quot;&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;depends_on&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;zookeeper-1&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;environment&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;KAFKA_BROKER_ID&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;KAFKA_ZOOKEEPER_CONNECT&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;zookeeper-1:32181&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;KAFKA_LISTENER_SECURITY_PROTOCOL_MAP&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;KAFKA_INTER_BROKER_LISTENER_NAME&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;INTERNAL&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;KAFKA_ADVERTISED_LISTENERS&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;INTERNAL://kafka-1:29092,EXTERNAL://localhost:9092&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;KAFKA_DEFAULT_REPLICATION_FACTOR&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;3&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;KAFKA_NUM_PARTITIONS&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;3&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;networks&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;kafka-backend&lt;/span&gt;
 
 
  &lt;span class=&quot;na&quot;&gt;kafka-2&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;confluentinc/cp-kafka:7.4.0&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;ports&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;9093:9093&quot;&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;depends_on&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;zookeeper-1&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;environment&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;KAFKA_BROKER_ID&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;KAFKA_ZOOKEEPER_CONNECT&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;zookeeper-1:32181&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;KAFKA_LISTENER_SECURITY_PROTOCOL_MAP&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;KAFKA_INTER_BROKER_LISTENER_NAME&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;INTERNAL&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;KAFKA_ADVERTISED_LISTENERS&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;INTERNAL://kafka-2:29093,EXTERNAL://localhost:9093&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;KAFKA_DEFAULT_REPLICATION_FACTOR&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;3&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;KAFKA_NUM_PARTITIONS&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;3&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;networks&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;kafka-backend&lt;/span&gt;
 
  &lt;span class=&quot;na&quot;&gt;kafka-3&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;confluentinc/cp-kafka:7.4.0&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;ports&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;9094:9094&quot;&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;depends_on&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;zookeeper-1&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;environment&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;KAFKA_BROKER_ID&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;3&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;KAFKA_ZOOKEEPER_CONNECT&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;zookeeper-1:32181&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;KAFKA_LISTENER_SECURITY_PROTOCOL_MAP&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;KAFKA_INTER_BROKER_LISTENER_NAME&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;INTERNAL&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;KAFKA_ADVERTISED_LISTENERS&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;INTERNAL://kafka-3:29094,EXTERNAL://localhost:9094&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;KAFKA_DEFAULT_REPLICATION_FACTOR&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;3&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;KAFKA_NUM_PARTITIONS&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;3&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;networks&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;kafka-backend&lt;/span&gt;
 
  &lt;span class=&quot;na&quot;&gt;kafka-ui&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;provectuslabs/kafka-ui&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;container_name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;kafka-ui&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;ports&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;8989:8080&quot;&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;restart&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;always&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;depends_on&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;zookeeper-1&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;kafka-1&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;kafka-2&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;kafka-3&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;environment&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;KAFKA_CLUSTERS_0_NAME=local&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka-1:29092,kafka-2:29093,kafka-3:29094&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;KAFKA_CLUSTERS_0_ZOOKEEPER=zookeeper-1:22181&lt;/span&gt;
      &lt;span class=&quot;na&quot;&gt;networks&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;kafka-backend&lt;/span&gt;
 
  &lt;span class=&quot;na&quot;&gt;telegraf&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;image&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;telegraf&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;container_name&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;telegraf&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;restart&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;always&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;volumes&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;./telegraf.conf:/etc/telegraf/telegraf.conf:ro&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;networks&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
      &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;kafka-backend&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;volumes&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;zookeeper_data&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;zookeeper_logs&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;

&lt;span class=&quot;na&quot;&gt;networks&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;kafka-backend&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;driver&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;bridge&lt;/span&gt;



&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;다음은 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;telegraf.conf&lt;/code&gt; 구성이다.&lt;br /&gt;
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;brokers&lt;/code&gt; 호스트 이름으로 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;kafka-1&lt;/code&gt; 서비스 이름을 써준다.&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;global_tags&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;

&lt;span class=&quot;pi&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;agent&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;interval = &quot;5s&quot;&lt;/span&gt;

&lt;span class=&quot;pi&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;outputs.kafka&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]]&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;brokers = [&quot;kafka-1:29092&quot;]&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;topic = &quot;foo&quot;&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;data_format = &quot;json&quot;&lt;/span&gt;

&lt;span class=&quot;pi&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;inputs.cpu&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]]&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;percpu = &lt;/span&gt;&lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;totalcpu = &lt;/span&gt;&lt;span class=&quot;no&quot;&gt;true&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;collect_cpu_time = &lt;/span&gt;&lt;span class=&quot;no&quot;&gt;false&lt;/span&gt;
  &lt;span class=&quot;s&quot;&gt;report_active = &lt;/span&gt;&lt;span class=&quot;no&quot;&gt;false&lt;/span&gt;

&lt;span class=&quot;pi&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;inputs.netstat&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]]&lt;/span&gt;

&lt;span class=&quot;pi&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;inputs.mem&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]]&lt;/span&gt;

&lt;span class=&quot;pi&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;inputs.processes&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;]]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;doker-compose up&lt;/code&gt;으로 실행한 후에 kafka-ui(http://127.0.0.1:8989)에 접속하면 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;telegraf.conf&lt;/code&gt;에 설정한 topic과 메시지 내용을 볼 수 있다.
&lt;img src=&quot;/img/2023_08_27/img2.png&quot; alt=&quot;02.png&quot; /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker-compose down&lt;/code&gt;으로 종료한다.
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;

</description>
				<pubDate>Sun, 27 Aug 2023 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2023/08/27/telegraf_kafka/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2023/08/27/telegraf_kafka/</guid>
			</item>
		
			<item>
				<title>오픈메트릭스(OpenMetrics)</title>
				        
        <description>&lt;p&gt;오픈메트릭스(OpenMetrics)는 클라우드 네이티브 앱의 메트릭 노출 표준화를 목표로 하는 CNCF 프로젝트다.&lt;br /&gt;
오픈메트릭스의 사양은 아래에 공개되어 있다.&lt;br /&gt;
https://github.com/OpenObservability/OpenMetrics/blob/main/specification/OpenMetrics.md&lt;/p&gt;

&lt;p&gt;오픈메트릭스는 프로메테우스(Prometheus) 메트릭 형식을 기반으로 한다. 프로메테우스 메트릭 형식은 간단한 텍스트 기반의 사람이 읽을 수 있는 데이터 형식이다.&lt;br /&gt;
InfluxDB, OpenTSDB, Graphite를 비롯한 다른 모니터링 시스템에서도 채택하고 있다. 많은 CNCF 프로젝트가 프로메테우스 메트릭 형식을 사용하여 메트릭을 노출한다. 또한 API 서버, etcd, CoreDNS 등과 같은 핵심 쿠버네티스 구성 요소에서도 찾을 수 있다.&lt;br /&gt;
프로메테우스 메트릭 형식이 많이 채용되면서 독립적인 프로젝트가 되었고, 이 메트릭 형식을 업계 표준으로 만들기 위한 프로젝트가 바로 오픈메트릭스다.&lt;/p&gt;

&lt;h3 id=&quot;데이터-모델&quot;&gt;데이터 모델&lt;/h3&gt;
&lt;p&gt;아래는 오픈메트릭스의 메트릭 데이터 예시다.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# TYPE acme_http_router_request_seconds summary&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# UNIT acme_http_router_request_seconds seconds&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# HELP acme_http_router_request_seconds Latency though all of ACME&apos;s HTTP request router.&lt;/span&gt;
acme_http_router_request_seconds_sum&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/api/v1&quot;&lt;/span&gt;,method&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;GET&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; 9036.32
acme_http_router_request_seconds_count&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/api/v1&quot;&lt;/span&gt;,method&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;GET&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; 807283.0
acme_http_router_request_seconds_created&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/api/v1&quot;&lt;/span&gt;,method&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;GET&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; 1605281325.0
acme_http_router_request_seconds_sum&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/api/v2&quot;&lt;/span&gt;,method&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;POST&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; 479.3
acme_http_router_request_seconds_count&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/api/v2&quot;&lt;/span&gt;,method&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;POST&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; 34.0
acme_http_router_request_seconds_created&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;path&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;/api/v2&quot;&lt;/span&gt;,method&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;POST&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt; 1605281325.0
&lt;span class=&quot;c&quot;&gt;# TYPE go_goroutines gauge&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# HELP go_goroutines Number of goroutines that currently exist.&lt;/span&gt;
go_goroutines 69
&lt;span class=&quot;c&quot;&gt;# TYPE process_cpu_seconds counter&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# UNIT process_cpu_seconds seconds&lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;# HELP process_cpu_seconds Total user and system CPU time spent in seconds.&lt;/span&gt;
process_cpu_seconds_total 4.20072246e+06
&lt;span class=&quot;c&quot;&gt;# EOF&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;메트릭스-엔드포인트&quot;&gt;메트릭스 엔드포인트&lt;/h3&gt;
&lt;p&gt;이 표준을 구현하려면 문서화된 엔드포인트에 대한 HTTP Get 요청의 응답으로 오픈메트릭스 형식의 메트릭을 노출한다. 엔드포인트의 이름은 /metrics다.&lt;/p&gt;

&lt;p&gt;sysdig에서 제공하는 샘플 앱으로 실제 메트릭 형식을 살펴보자.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git clone https://github.com/sysdiglabs/custom-metrics-examples
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;docker build custom-metrics-examples/prometheus/golang &lt;span class=&quot;nt&quot;&gt;-t&lt;/span&gt; prometheus-golang
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;docker run &lt;span class=&quot;nt&quot;&gt;-d&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--rm&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--name&lt;/span&gt; prometheus-golang &lt;span class=&quot;nt&quot;&gt;-p&lt;/span&gt; 8080:8080 prometheus-golang
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;브라우저에서 localhost:8080/metrics로 이동한다.&lt;/p&gt;

&lt;h3 id=&quot;클라이언트-라이브러리&quot;&gt;클라이언트 라이브러리&lt;/h3&gt;
&lt;p&gt;프로메테우스 메트릭 형식을 구현한 클라이언트 라이브러러 목록은 아래에서 볼 수 있다.
이 클라이언트를 사용해서 오픈메트릭스의 매트릭 형식도 노출 가능한지는 더 확인해봐야겠다.&lt;br /&gt;
https://prometheus.io/docs/instrumenting/clientlibs/&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;참고 1: &lt;a href=&quot;https://baris.io/blog/prometheus-exposition-format-openmetrics&quot;&gt;OpenMetrics and Prometheus Exposition Format&lt;/a&gt;&lt;br /&gt;
참고 2: &lt;a href=&quot;https://sysdig.com/blog/prometheus-metrics/&quot;&gt;Prometheus metrics / OpenMetrics code instrumentation&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;

</description>
				<pubDate>Sun, 30 Jul 2023 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2023/07/30/openmetrics_review/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2023/07/30/openmetrics_review/</guid>
			</item>
		
			<item>
				<title>(리뷰)리프트오프</title>
				        
        <description>&lt;h2 id=&quot;리프트오프&quot;&gt;리프트오프&lt;/h2&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;h4 id=&quot;에릭-버거-저-정현창-역&quot;&gt;에릭 버거 저, 정현창 역&lt;/h4&gt;

&lt;p&gt;&lt;a href=&quot;https://www.yes24.com/Product/Goods/108017136&quot;&gt;&lt;img src=&quot;/img/2023_07_16/img.jpg&quot; alt=&quot;01.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;​&lt;br /&gt;
우주에 진입한 로켓에서 추진체가 분리된다. 그런데… 추진체가 낙하하지 않는다! 다시 연소하더니.. 출발한 곳을 찾아 되돌아와서 수직으로 착륙해 버린다!?&lt;br /&gt;
유트브에서 봤던 이 영상은 처음엔 조작이라고 생각할 정도로 그야말로 영화 같았다. &lt;br /&gt;
로켓 발사 비용을 줄이기 위한 이 시도를 비롯해 스타십, 스타링크 등은 화성에 인류를 보내 정착하기 위한 스페이스X의 여러 프로젝트 중 하나다.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;이 책은 2002년 스페이스X의 설립 초창기부터 2008년 팰컨1의 4차 발사까지의 이야기를 다루며 머스크뿐만 아니라 지금의 스페이스X를 있게한 여러 인물들에 대해서도 자세히 소개한다. 목표 성공을 위해 달려가지만 끊임없이 발생하는 문제들과 그 해결 과정, 실패에 대한 두려움을 극복하는 과정이 드라마틱하게 전개된다.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;록히드마틴이나 보잉 등 이미 항공 우주 산업에 뿌리를 단단히 내린 기존 기업들에 맞서기 위해 초창기 스페이스X는새로운 기술로 빨리 만들고 시험해서 잘못된 걸 수정해가는 lean 방식을 사용한다. lean 방식은 소프트웨어 개발 방법론으로도 사용되는데 낭비, 즉 결함에 집중하여 이를 줄이는 개발 방법이다.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;스페이스X는 책에서 소개하는 팰컨 발사외에도 드래곤, 스타십, 스타링크 등의 사업을 이어가고 있다. 머스크는 또한 두뇌에 직접 연결하는 기계를 만드는 뉴럴링크나 도시 아래 터널을 뚫어 초고속으로 이동하는 시스템을 개발하는 회사도 만들었다. 머스크는 돈을 모으는 이유로, 인류를 다행성(Multi-Planetary) 종족으로 만들기 위해서라고 한다.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;그 꿈이 실현될지, 그 순간을 볼 수 있을지 알 수 없지만, 당면한 문제가 아니라 인류의 미래를 위한 꿈을 꾸고 엄청난 열정으로 그 길을 나아가는 괴짜 사업가에게 열렬한 응원의 박수를 보낸다.&lt;br /&gt;&lt;/p&gt;

</description>
				<pubDate>Sun, 16 Jul 2023 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2023/07/16/review_liftoff/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2023/07/16/review_liftoff/</guid>
			</item>
		
			<item>
				<title>go의 낯선 특징들</title>
				        
        <description>&lt;p&gt;처음 golang을 배울때 어색한 특징들…&lt;/p&gt;

&lt;h3 id=&quot;1-단축-할당문short-assignment-statement&quot;&gt;1. 단축 할당문(Short Assignment Statement)&lt;/h3&gt;
&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;areYouAString&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;yes, i am string!!&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;함수 내에서는 위와 같이 var를 생략하고 변수 선언과 값 할당을 동시에 할 수 있다.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 id=&quot;2-가져온-패키지는-반드시-사용해야-함&quot;&gt;2. 가져온 패키지는 반드시 사용해야 함.&lt;/h3&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;
	&lt;span class=&quot;s&quot;&gt;&quot;fmt&quot;&lt;/span&gt;
	&lt;span class=&quot;s&quot;&gt;&quot;os&quot;&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;// 사용하지 않는 패키지&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
 
&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(){&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;fmt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Hello&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;os 패키지를 사용하지 않았기 때문에 컴파일 에러가 발생한다.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;imported and not used: &quot;os&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 id=&quot;3-컬렉션-반복에-사용하는-range-함수의-반환-값은-2개&quot;&gt;3. 컬렉션 반복에 사용하는 range 함수의 반환 값은 2개&lt;/h3&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;fmt&quot;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(){&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;a&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;b&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;c&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;d&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;range&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;n&quot;&gt;fmt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Printf&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;%d -&amp;gt; %s&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;위 코드에서 i에 index, value에 값이 반환된다. i를 사용할 일이 없다면 대신 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_&lt;/code&gt;를 쓴다.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;0 -&amp;gt; a
1 -&amp;gt; b
2 -&amp;gt; c
3 -&amp;gt; d
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 id=&quot;4-변수명-첫-글자가-대문자면-public-아니면-private&quot;&gt;4. 변수명 첫 글자가 대문자면 public, 아니면 private&lt;/h3&gt;
&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Message&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
 &lt;span class=&quot;n&quot;&gt;Text&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;// public&lt;/span&gt;
 &lt;span class=&quot;n&quot;&gt;text&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;// private&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Text는 현재 패키지 밖에서도 사용할 수 있다.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 id=&quot;5-함수의-반환값-위치&quot;&gt;5. 함수의 반환값 위치&lt;/h3&gt;
&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SumAndDiff&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;// int형 리턴값이 두 개인 함수 정의&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;위 함수의 반환값은 2개의 int로, 함수 이름 앞에 쓰지 않고 맨 뒤에 적는다.&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 id=&quot;6-리시버&quot;&gt;6. 리시버&lt;/h3&gt;
&lt;p&gt;go는 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;class&lt;/code&gt;가 없으므로 메서드 정의를 할때 Receiver Parameter를 명시해서 별도로 선언하고, 메서드를 호출할 때 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;리시버.메서드 이름()&lt;/code&gt; 형태를 사용한다.&lt;/p&gt;
&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyType&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;

&lt;span class=&quot;c&quot;&gt;// 리시버 매개변수 m MyType이 있기 때문에 &lt;/span&gt;
&lt;span class=&quot;c&quot;&gt;// sayHi는 MyType에 대한 메서드다.&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;m&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;MyType&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;sayHi&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;fmt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Hi&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 id=&quot;7-타입-단언&quot;&gt;7. 타입 단언&lt;/h3&gt;
&lt;p&gt;인터페이스 타입에서 실제(concrete) 타입을 가져온다. 
다른 언어의 캐스팅 연산과 같은데 go에서는 타입을 맨 뒤에 표시하다보니 타입 단언 표기 역시 낯설다.&lt;/p&gt;

&lt;div class=&quot;language-go highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;package&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;main&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;fmt&quot;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;func&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;interface&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{}&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;hello&quot;&lt;/span&gt;

	&lt;span class=&quot;n&quot;&gt;s&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;// 타입 단언 - 성공&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;fmt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

	&lt;span class=&quot;n&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ok&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;// 타입 단언 - 성공&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;fmt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ok&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

	&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ok&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;:=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;float64&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;// 타입 단언 - 실패&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;fmt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ok&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

	&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;float64&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;c&quot;&gt;// // 타입 단언 - 실패(panic)&lt;/span&gt;
	&lt;span class=&quot;n&quot;&gt;fmt&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Println&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;출력 결과&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;hello
hello &lt;span class=&quot;nb&quot;&gt;true
&lt;/span&gt;0 &lt;span class=&quot;nb&quot;&gt;false
&lt;/span&gt;panic: interface conversion: interface &lt;span class=&quot;o&quot;&gt;{}&lt;/span&gt; is string, not float64

goroutine 1 &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;running]:
main.main&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt;
	/tmp/sandbox2825551196/prog.go:17 +0x14a

Program exited.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;참고 1: &lt;a href=&quot;https://betterprogramming.pub/7-golang-features-newbies-and-not-so-newbies-may-find-weird-e0542d079097&quot;&gt;7 Golang Features You Might Find Weird&lt;/a&gt;&lt;br /&gt;
참고 2: &lt;a href=&quot;https://go.dev/tour/methods/15&quot;&gt;Type assertions&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
				<pubDate>Sun, 09 Jul 2023 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2023/07/09/weird_golang_features/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2023/07/09/weird_golang_features/</guid>
			</item>
		
			<item>
				<title>(리뷰)리더의 생각</title>
				        
        <description>&lt;h2 id=&quot;리더의-생각&quot;&gt;리더의 생각&lt;/h2&gt;
&lt;p&gt;​&lt;/p&gt;
&lt;h4 id=&quot;유석문-저-로드북&quot;&gt;유석문 저, 로드북&lt;/h4&gt;

&lt;p&gt;&lt;a href=&quot;https://www.yes24.com/Product/Goods/116922949&quot;&gt;&lt;img src=&quot;/img/2023_07_08/image.png&quot; alt=&quot;01.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;​&lt;br /&gt;
‘프로그래머 철학을 만나다.’라는 책으로 처음 저자를 알게됐다. 철학 사상을 기반으로 개발 과정에서 만나는 문제와 고민을 풀어내는 방법이 인상적이었고, 지금도 답답하고 이해하기 어려운 상황을 만나면 찾아보게 되는 책이다. 당시에도 자존감은 가장 중요한 주제였지만 이번 책에서도 그렇다.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;개발자로 경력을 쌓아가다 관리자로 성공적인 경력을 계속 이어가는 경우도 있는 반면, 맞지 않는 옷을 입은 것처럼 어색해하고 어려워하다 원래의 자리로 돌아가거나 경력을 마치는 경우도 흔하다. 전자와 후자의 길을 가르는 여러 요소가 있겠지만 인간 관계의 어려움을 얼마나 견뎌내고 해결하는가도 큰 지분이 있을 것이다.&lt;br /&gt;&lt;br /&gt;
​
이 직업을 선택한 건 복잡한 인간 관계를 조금은 피할 수 있을 것이라는 얄팍한 생각이 컸는데 그 생각이 너무나 순진하고 어리석었다는 걸 깨닫는 데는 직장 생활을 시작하고 채 몇달이 걸리지 않았다.
관계를 떠나서 살 수 없는 것이 인간이고, 인간이 비합리적인 존재라면 사람 사이의 모든 인과 관계를 이해한다는 것은 애초에 불가능하고 그로 인해 상처 받는 것도 어리석은 일이다.&lt;br /&gt;
하지만, 머리로 이렇게 생각하더라도 내일 당장 일상에서 이해하기 어려운 일을 겪을 것이고 또 상처를 받을 것이다.
자존감은 이러한 고민들이 쌓여 방황하고 실패를 만나 쓰러지더라도 시간이 지나면 다시 털고 일어날 수 있게 해주는 힘이다.&lt;br /&gt;&lt;br /&gt;
​
CTO라고 하면 그 회사의 기술을 책임지고 개발자에게 비전을 제시하는 자리인데 평소에 이런 분들과 얘기 나눌 수 있는 기회는 흔치 않다. 그 자리에서 느께게 되는 고민, 생각 등이 궁금했는데 그런 아쉬움을 이 책을 통해 조금 달래볼 수 있다.​&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;개발 관련 전문 지식이 필요한 책은 아니어서 대부분의 직장인들이 선배의 고민과 경험을 들어본다는 생각으로 읽어도 좋겠다.&lt;/p&gt;
</description>
				<pubDate>Sat, 08 Jul 2023 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2023/07/08/review_thought_of-leader/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2023/07/08/review_thought_of-leader/</guid>
			</item>
		
			<item>
				<title>(번역서)크로스 플랫폼 개발을 위한 C# 10과 닷넷 6</title>
				        
        <description>&lt;h4 id=&quot;--책소개&quot;&gt;- 책소개&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;C# 10의 새로운 기능과 닷넷 6의 전반적인 내용을 다룬다. 설명을 최소한으로 하고 예제 코드를 직접 타이핑해보면서 흥미 있게 익힐 수 있도록 구성되어 있다. C#의 기본 문법부터 고급 기능, 닷넷을 활용한 콘솔, 데이터베이스, 웹 프로그래밍까지의 과정을 비주얼 스튜디오 2022, 비주얼 스튜디오 코드를 사용해가면서 배운다. 닷넷과 C#을 처음 접하는 개발자를 비롯해, 새로운 기능을 살펴보고 싶어하는 기존 개발자들이 짧은 시간에 전체 구성을 이해하고 활용할 수 있게 도와준다.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.yes24.com/Product/Goods/119948664&quot;&gt;&lt;img src=&quot;/img/2023_07_01/image.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4 id=&quot;--에이콘-2023년-7월&quot;&gt;- 에이콘, 2023년 7월&lt;/h4&gt;

&lt;h4 id=&quot;---구매--예스24--알라딘&quot;&gt;-  구매 : &lt;a href=&quot;https://www.yes24.com/Product/Goods/119948664&quot; target=&quot;_blank&quot;&gt;예스24 &lt;/a&gt;, &lt;a href=&quot;https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=319986526&quot; target=&quot;_blank&quot;&gt;알라딘&lt;/a&gt;&lt;/h4&gt;

&lt;h4 id=&quot;--책-내용-중-잘못됐거나-궁금한-점-있으면-아래에-남겨주세요-nnhopehotmailcom으로-보내주셔도-됩니다&quot;&gt;- 책 내용 중, 잘못됐거나 궁금한 점 있으면 아래에 남겨주세요. nnhope@hotmail.com으로 보내주셔도 됩니다.&lt;/h4&gt;
</description>
				<pubDate>Sat, 01 Jul 2023 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/books/2023/07/01/book_993_c10_net6/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/books/2023/07/01/book_993_c10_net6/</guid>
			</item>
		
			<item>
				<title>(번역서)266가지 문제로 정복하는 코딩 인터뷰 in C++, 262가지 문제로 정복하는 코딩 인터뷰 in Java</title>
				        
        <description>&lt;h4 id=&quot;--책소개&quot;&gt;- 책소개&lt;/h4&gt;
&lt;p&gt;&lt;em&gt;스타트업에서 빅테크 기업까지, 실리콘밸리 면접관이 전하는 코딩 인터뷰 노하우&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;코딩 인터뷰는 어색한 공간, 낯선 면접관 앞에서 이루어진다. 후회 없이 인터뷰를 마치려면 평소에 난이도와 주제별로 다양한 문제를 풀며 철저히 준비해 두어야 한다. 이 책은 면접관으로 수많은 인터뷰를 해 온 저자들이 집필한 소프트웨어 개발 인터뷰의 종합 안내서다.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;자료구조, 탐색, 정렬, 알고리즘 설계 원칙 및 동시성 등에 관련된 문제를 장별로 제시한다. 각 장은 먼저, 문제를 풀기 위해 꼭 알고 있어야 할 내용, 중요한 라이브러리 함수 등을 설명한다. 그 후 실전처럼 문제를 분석하고 답을 내고 코드를 보여 준다. 해당 문제에 대한 설명이 끝나면 비슷한 응용 문제를 제시해 배운 내용을 한 번 더 단단히 할 수 있다. 책의 후반부에는 난이도가 표기된 고난도 문제가 많이 실려 있다. 제대로 풀 경우 면접관에게 강한 인상을 줄 수도 있고, 많은 생각을 하게 해 알고리즘 트레이닝에도 도움이 된다.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/book_cpp_java_coding_interview/cpp.jpg&quot; alt=&quot;&quot; /&gt; &lt;img src=&quot;/img/book_cpp_java_coding_interview/java.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;--인사이트-2021년-10월&quot;&gt;- 인사이트, 2021년 10월&lt;/h4&gt;

&lt;h4 id=&quot;---구매--예스24--알라딘&quot;&gt;-  구매 : &lt;a href=&quot;https://www.yes24.com/Product/Goods/103768603&quot; target=&quot;_blank&quot;&gt;예스24 &lt;/a&gt;, &lt;a href=&quot;https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=279822924&amp;amp;start=slayer&quot; target=&quot;_blank&quot;&gt;알라딘&lt;/a&gt;&lt;/h4&gt;

&lt;h4 id=&quot;--책-내용-중-잘못됐거나-궁금한-점-있으면-아래에-남겨주세요-nnhopehotmailcom으로-보내주셔도-됩니다&quot;&gt;- 책 내용 중, 잘못됐거나 궁금한 점 있으면 아래에 남겨주세요. nnhope@hotmail.com으로 보내주셔도 됩니다.&lt;/h4&gt;

</description>
				<pubDate>Fri, 01 Oct 2021 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/books/2021/10/01/book_994_cpp_java_coding_interview/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/books/2021/10/01/book_994_cpp_java_coding_interview/</guid>
			</item>
		
			<item>
				<title>windows proxy</title>
				        
        <description>&lt;p&gt;일반적으로 윈도우 애플리케이션은 아래 3가지 방법으로 프록시 서버를 사용한다.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;WinInet 사용&lt;br /&gt;
WinInet 라이브러리를 사용하는 애플리케이션은 Internet Explorer에서 구성한 것과 동일한 프록시 설정을 사용한다.&lt;br /&gt;
다른 애플리케이션에서도 WinInet으로 이 설정을 구해서 사용할 수 있다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;WinHttp 사용&lt;br /&gt;
WinHttp는 윈도우 서비스처럼, 백그라운드에서 사용자 개입이 필요 없는 애플리케이션에 적합하며, WinInet에 비해 속도면에서 빠르다.&lt;br /&gt;
WinHttp의 프록시 설정과 WinInet의 프록시 설정은 서로 다르며, WinHttp는 default로 WinInet의 프록시 설정을 사용하지 않는다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;애플리케이션 자체에 프록시 셋팅을 포함&lt;br /&gt;
애플리케이션 자체에서 Winsock 라이브러리를 사용해서 직접 프록시 설정을 구성한다.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;따라서, 아래와 같이 WinHttp를 사용한 프록시 설정은, WinInet의 프록시 설정(=Internet Explorer)과 서로 무관&lt;/code&gt;하다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/2020_10_18/proxy_show.png&quot; alt=&quot;01.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;한편, &lt;a href=&quot;https://docs.microsoft.com/en-us/windows/win32/api/winhttp/nf-winhttp-winhttpgetieproxyconfigforcurrentuser&quot;&gt;WinHttpGetIEProxyConfigForCurrentUser&lt;/a&gt;를 이용하면 IE의 프록시 설정을 얻어 올 수 있다.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://chromium.googlesource.com/external/libjingle/chrome-sandbox/+/60598307c80be80da28e5ae7921352bd874fb05b/talk/base/proxydetect.cc#675&quot;&gt;예시 코드&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;만약, IE 설정에서 ‘자동으로 설정 검색’이 켜져 있다면 &lt;a href=&quot;https://docs.microsoft.com/en-us/windows/win32/api/winhttp/nf-winhttp-winhttpgetproxyforurl&quot;&gt;WinHttpGetProxyForUrl&lt;/a&gt;을 추가로 사용해야 한다.&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;img src=&quot;/img/2020_10_18/IE_OPT_01.png&quot; alt=&quot;02.png&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://chromium.googlesource.com/external/libjingle/chrome-sandbox/+/60598307c80be80da28e5ae7921352bd874fb05b/talk/base/proxydetect.cc#1246&quot;&gt;예시 코드 1&lt;/a&gt;: WinHttpGetProxyForUrl을 호출해야 할 지 판단&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://chromium.googlesource.com/external/libjingle/chrome-sandbox/+/60598307c80be80da28e5ae7921352bd874fb05b/talk/base/proxydetect.cc#712&quot;&gt;예시 코드 2&lt;/a&gt;: WinHttpGetProxyForUrl 사용&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;참고로, Fiddler는 IE 프록시 설정을 통해 WinInet 세션을 캡처한다. Fiddler를 실행하고 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Capture Traffic&lt;/code&gt;을 켰다면 아래처럼 IE 프록시가 설정된다.&lt;br /&gt;
 &lt;img src=&quot;/img/2020_10_18/IE_OPT_02.png&quot; alt=&quot;03.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;WinInet이 아닌 WinHttp, cURL을 사용하는 애플리케이션은, 위 IE 설정을 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;WinHttpGetIEProxyConfigForCurrentUser&lt;/code&gt; 등으로 구해서 프록시 설정을 해줘야 Fiddler에서 트래픽을 캡처할 수 있다.&lt;br /&gt;
 그렇지 않은 애플리케이션이라면, WinHttp는 수동으로 아래 명령을,&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; netsh winhttp &lt;span class=&quot;nb&quot;&gt;set &lt;/span&gt;proxy 127.0.0.1:8888
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;cURL은 아래 명령을 수동으로 실행하면 Fiddler에서 트래픽 캡처가 가능하다.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl &lt;span class=&quot;nt&quot;&gt;--proxy&lt;/span&gt; 127.0.0.1:8888
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;참고 1: &lt;a href=&quot;https://securelink.net/en-be/insights/windows-proxy-settings-explained/&quot;&gt;Windows proxy settings explained&lt;/a&gt;&lt;br /&gt;
참고 2: &lt;a href=&quot;https://docs.ansible.com/ansible/latest/collections/community/windows/win_http_proxy_module.html&quot;&gt;Manages proxy settings for WinHTTP&lt;/a&gt;&lt;br /&gt;
참고 3: &lt;a href=&quot;https://docs.telerik.com/fiddler/configure-fiddler/tasks/ConfigureWinHTTPApp&quot;&gt;Configure a WinHTTP Application to Use Fiddler&lt;/a&gt;&lt;br /&gt;
참고 4: &lt;a href=&quot;https://docs.telerik.com/fiddler/configure-fiddler/tasks/ConfigurePHPcURL&quot;&gt;Configure a PHP/cURL Application to Use Fiddler&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
				<pubDate>Sun, 18 Oct 2020 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2020/10/18/windows_proxy/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2020/10/18/windows_proxy/</guid>
			</item>
		
			<item>
				<title>aws ses(simple email service)를 이용한 파일 첨부 메일 전송</title>
				        
        <description>&lt;p&gt;제목과 내용만 채워 이메일을 보낸다면 aws ses의 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;send-email&lt;/code&gt; 명령으로 아래처럼 보낼 수 있다.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;aws ses send-email &lt;span class=&quot;nt&quot;&gt;--region&lt;/span&gt; us-west-2 &lt;span class=&quot;nt&quot;&gt;--from&lt;/span&gt; abc@abc.com &lt;span class=&quot;nt&quot;&gt;--to&lt;/span&gt; abc@abc.com &lt;span class=&quot;nt&quot;&gt;--subject&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Hello&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--html&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;Hello, there&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;메일에 파일을 첨부하려면 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;send-raw-email&lt;/code&gt; 명령을 사용한다.&lt;br /&gt;
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;send-raw-email&lt;/code&gt;은 CLI에서 처리하기 까다롭다. 파이썬을 쓸 수 있는 환경이라면 파이썬 AWS SDK인 &lt;a href=&quot;https://aws.amazon.com/ko/sdk-for-python/&quot;&gt;boto3&lt;/a&gt;를 써서 쉽게 처리할 수 있다.&lt;/p&gt;

&lt;p&gt;아래 코드 snippet은 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;send-raw-email&lt;/code&gt;을 사용하는 &lt;a href=&quot;https://docs.aws.amazon.com/ko_kr/ses/latest/DeveloperGuide/send-using-sdk-python.html&quot;&gt;boto3 샘플 코드&lt;/a&gt;에서 ‘제목’을 실행 parameter로 전달할 수 있게 하고, ‘여러 수신인’을 설정할 수 있도록 조금 손 댄 코드다.&lt;/p&gt;

&lt;script src=&quot;https://gist.github.com/surinkim/5190f14bc8724179550c7e337b21d759.js&quot;&gt;&lt;/script&gt;

&lt;p&gt;젠킨스 파이프라인에 적용한다면 아래처럼 쓸 수 있다.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;pipeline&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    agent any
    stages &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
        stage&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;01-Send an email with attachment&apos;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;){&lt;/span&gt;
            steps&lt;span class=&quot;o&quot;&gt;(){&lt;/span&gt;
                script &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
                    def subject &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;Build failed in Jenkins : &apos;&lt;/span&gt; + env.JOB_NAME +  &lt;span class=&quot;s1&quot;&gt;&apos;#&apos;&lt;/span&gt; + env.BUILD_NUMBER
                    bat &lt;span class=&quot;s1&quot;&gt;&apos;E:\\Python37-32\\python .\\send.py &apos;&lt;/span&gt; +  &lt;span class=&quot;s1&quot;&gt;&apos;&quot;&apos;&lt;/span&gt; + subject + &lt;span class=&quot;s1&quot;&gt;&apos;&quot;&apos;&lt;/span&gt;
                &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;참고 1)&lt;br /&gt;
보내는 메일 주소와 받는 메일 주소는 모두 aws ses 콘솔에서 ‘인증’된 주소여야 한다.
&lt;img src=&quot;/img/2020_10_17/aws_ses_console.png&quot; alt=&quot;01.png&quot; /&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;참고 2)&lt;br /&gt;
샘플 코드의 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CONFIGURATION_SET&lt;/code&gt;을 사용하려면 aws ses 콘솔에서 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ConfigSet&lt;/code&gt;을 만들어줘야 한다. 사용하지 않으려면 주석 설명처럼, 샘플 코드의 20, 97 line 두 군데를 주석 처리해 준다.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
				<pubDate>Sat, 17 Oct 2020 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2020/10/17/aws_ses_file_attach/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2020/10/17/aws_ses_file_attach/</guid>
			</item>
		
			<item>
				<title>vs2015에서 cpprestsdk 2.10.6 사용하기(Static/MD)</title>
				        
        <description>&lt;p&gt;vs2015를 지원하는 cpprestsdk의 마지막 버전은 2.10.6이다.&lt;br /&gt;
이후 버전은 release 파일에 솔루션 파일이 없기 때문에 cmake로 직접 빌드해야 하며, 최소 vs2017 이상이 필요하다. 그런데, vs2017을 쓸 수 있는 환경이라면 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Nuget&lt;/code&gt;이나 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vcpkg&lt;/code&gt;로 설치하는 게 낫다.
(vcpkg에서 &lt;a href=&quot;http://corecode.pe.kr/2020/03/26/vcpkg/&quot;&gt;의존성 기술에 대한 문제점&lt;/a&gt;도 참고하자.)&lt;/p&gt;

&lt;p&gt;2.10.6 release 파일은 &lt;a href=&quot;https://github.com/microsoft/cpprestsdk/releases/tag/v2.10.16&quot;&gt;cpprestsdk github 페이지&lt;/a&gt;에서 내려 받을 수 있다.&lt;/p&gt;

&lt;p&gt;여기서 하려는 건, static 빌드, 그러니까 lib으로 빌드하되, 런타임 라이브러리는 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/MD&lt;/code&gt;로 설정하는 경우다.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;cpprestsdk-2.10.6.zip 압축을 푼 후, 런타임 라이브러리를 조정한다.
&lt;img src=&quot;/img/2020_09_13/01.png&quot; alt=&quot;01.png&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;전처리기 정의&lt;/code&gt;에 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_NO_ASYNCRTIMP&lt;/code&gt;를 추가해준다.
&lt;img src=&quot;/img/2020_09_13/02.png&quot; alt=&quot;02.png&quot; /&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;cpprestsdk를 사용할 target dll의 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;전처리기 정의&lt;/code&gt;에도 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_NO_ASYNCRTIMP&lt;/code&gt;를 추가한다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;다음으로, target dll의 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;추가 종속성&lt;/code&gt;에 다음 라이브러리들을 입력한다.
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt; zlibstatic.lib&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;ssleay32.lib&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;libeay32.lib&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;bcrypt.lib&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;crypt32.lib&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;winhttp.lib&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;libcpprest140_2_10.lib
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cpprestsdk&lt;/code&gt; 하위의 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pacakges&lt;/code&gt;폴더에서, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;추가 종속성&lt;/code&gt;에 입력한 라이브러리들을 가져와 필요한 위치에 복사한다. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;packages&lt;/code&gt; 폴더 하위에는, 아래와 같이 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cpprestsdk&lt;/code&gt;의 의존성 모듈에 대한 빌드 바이너리가 포함되어 있다.
&lt;img src=&quot;/img/2020_09_13/03.png&quot; alt=&quot;03.png&quot; /&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;빌드가 끝나면 target dll을 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Dependency Viewer&lt;/code&gt;에서 봤을 때, cpprest140_2_10.dll이 표시되지 않는지 확인한다.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;참고&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/56097412/how-to-statically-link-cpprest-without-dll-files-in-vs-project/57177759&quot;&gt;How to statically link cpprest without dll files in VS project?&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
				<pubDate>Sun, 13 Sep 2020 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2020/09/13/cpprestsdk_2_10_6_in_vs2015/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2020/09/13/cpprestsdk_2_10_6_in_vs2015/</guid>
			</item>
		
			<item>
				<title>cocos2dx 설치 및 프로젝트 생성하기</title>
				        
        <description>&lt;p&gt;Cocos2d-x 설치 및 프로젝트 생성 절차를 정리한다.&lt;/p&gt;

&lt;h3 id=&quot;1-파이썬-27x-버전-설치&quot;&gt;1. 파이썬 2.7.X 버전 설치&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;cocos2dx는 현재도, 앞으로도 &lt;a href=&quot;https://github.com/cocos2d/cocos2d-x/issues/11210&quot;&gt;파이썬 3.X 버전의 지원 계획이 없다.&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;따라서, 다른 파이썬 버전이 이미 설치돼 있더라도, 2.7.X 버전을 반드시 설치해야 한다.&lt;/li&gt;
  &lt;li&gt;path에 파이썬 2.7.X와 다른 버전이 이미 설정돼 있다면, 아래 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2. cocos2dx 설치&lt;/code&gt; 하기 전에 2.7 경로로 잠깐 바꾸고, 프로젝트 생성한 뒤에 원래 버전으로 원복하는 건 괜찮다.
&lt;img src=&quot;/img/2020_08_24/01.png&quot; alt=&quot;01.png&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;2-cocos2d-x-설치&quot;&gt;2. Cocos2d-x 설치&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;https://cocos2d-x.org/download 에서 3.17.2 다운로드(4.0 버전도 있지만, 참고할 레퍼런스는 대부분 ver 3.X 기준이라 제외함.)&lt;/li&gt;
  &lt;li&gt;가능한 드라이브 루트 경로에 압축 해제&lt;/li&gt;
  &lt;li&gt;압축 해제 후에, 폴더 내의 setup.py를 cmd 창에서 실행한다.
    &lt;blockquote&gt;
      &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;setup.py&lt;/code&gt;는 cocos2d-x에서 사용하는 환경 변수를 자동으로 등록해 준다.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;환경 변수 등록시에 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NDK_ROOT, ANDROID_SDK_ROOT, ANT_ROOT&lt;/code&gt; 등은 windows 개발할 때 필요없으므로 Enter 쳐서 skip해도 된다.&lt;/li&gt;
  &lt;li&gt;등록이 끝나고, cmd 창에서 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cocos&lt;/code&gt; 명령을 실행했을 때 아래와 같이 나오면 정상이다.     &lt;br /&gt;
&lt;img src=&quot;/img/2020_08_24/02.png&quot; alt=&quot;02.png&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;3-cocos2dx-샘플-프로젝트-생성&quot;&gt;3. cocos2dx 샘플 프로젝트 생성&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;cocos 명령으로 프로젝트 생성&lt;/li&gt;
  &lt;li&gt;cocos new [프로젝트명] –p [패키지명] –l [사용할 언어] –d [생성할 경로]
    &lt;blockquote&gt;
      &lt;p&gt;ex )cocos new hello -p com.cocos2dx.hello -l cpp -d e:\cocos2d-x-3.17.2\projects&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;프로젝트 생성이 완료되면, 아래 경로에 비주얼 스튜디오 솔루션 파일이 생성된다.
&lt;img src=&quot;/img/2020_08_24/02.png&quot; alt=&quot;03.png&quot; /&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;기타&quot;&gt;기타&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;Windows에서는 기본으로 x86 플랫폼만 지원한다. Cocos2d-x의 종속성 라이브러리들을 x64로 빌드해주는 별도의 프로젝트가 있으니, x64 플랫폼이 필요하면 이걸 쓰라는 답변이 있다.&lt;/li&gt;
  &lt;li&gt;StackOverflow에서, &lt;a href=&quot;https://stackoverflow.com/questions/24859556/is-cocos2d-x-always-uses-opengl&quot;&gt;Cocos2d-x는 모든 플랫폼에서 OpenGL을 사용한다&lt;/a&gt;, &lt;a href=&quot;https://github.com/cocos2d/cocos2d-x/pull/5924&quot;&gt;WP8은 OpenGL을 지원하지 않으므로 Angle을 사용한다&lt;/a&gt;‘는 글이 보이는데, 워낙 옛날 글이고 3.0 업데이트 이전 글이라 지금은 어떻게 달라졌는지 모르겠다.
    &lt;blockquote&gt;
      &lt;p&gt;&lt;a href=&quot;https://docs.cocos2d-x.org/cocos2d-x/v4/en/upgradeGuide/&quot;&gt;4.0 버전부터 애플 플랫폼에서는 Metal을 렌더링 엔진으로 사용한다.&lt;/a&gt;&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Mon, 24 Aug 2020 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2020/08/24/cocos2dx_install_and_sample/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2020/08/24/cocos2dx_install_and_sample/</guid>
			</item>
		
			<item>
				<title>루비/jekyll 설치, bundle update</title>
				        
        <description>&lt;p&gt;새 PC에서 jekyll로 만든 이 사이트(&lt;a href=&quot;https://github.com/surinkim/surinkim.github.io&quot;&gt;surinkim.github.io&lt;/a&gt;)를 clone하고 로컬에서 띄울 때 필요한 절차를 기록했다.&lt;/p&gt;

&lt;h3 id=&quot;1ruby-설치&quot;&gt;1.ruby 설치&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://rubyinstaller.org/downloads/&quot;&gt;RubyInstaller&lt;/a&gt;를 내려받아 설치한다. 오른쪽에 추천하는 버전이 소개돼있다. Ruby+Devkit 2.6.X(x64)를 설치했다.&lt;/p&gt;

&lt;h3 id=&quot;2jekyll-설치&quot;&gt;2.jekyll 설치&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;http://jekyllrb-ko.github.io/&quot;&gt;여기를&lt;/a&gt; 참고해서 jekyll을 설치한다.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gem &lt;span class=&quot;nb&quot;&gt;install &lt;/span&gt;bundler jekyll
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;해당 페이지에 따로 나오지 않았지만, jekyll 설치 후에는 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bundle update&lt;/code&gt;를 실행해줘야 아래 2-2) 패키지 버전 문제가 발생하지 않는다.&lt;/p&gt;

&lt;h4 id=&quot;2-1-패키지-수동-설치&quot;&gt;2-1) 패키지 수동 설치&lt;/h4&gt;
&lt;p&gt;아래처럼 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GemNotFound&lt;/code&gt;에러가 나면 해당 패키지를 수동 설치해 준다.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;PS D:&lt;span class=&quot;se&quot;&gt;\w&lt;/span&gt;ork&lt;span class=&quot;se&quot;&gt;\g&lt;/span&gt;ithub_surinkim&lt;span class=&quot;se&quot;&gt;\s&lt;/span&gt;urinkim.github.io&amp;gt; jekyll serve &lt;span class=&quot;nb&quot;&gt;.&lt;/span&gt;
Traceback &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;most recent call last&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;:
        12: from d:/Ruby26-x64/bin/jekyll:23:in &lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;&amp;lt;main&amp;gt;&lt;span class=&quot;s1&quot;&gt;&apos;
        11: from d:/Ruby26-x64/bin/jekyll:23:in `load&apos;&lt;/span&gt;
        ...
         2: from D:/Ruby26-x64/lib/ruby/2.6.0/bundler/spec_set.rb:85:in &lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;materialize&lt;span class=&quot;s1&quot;&gt;&apos;
         1: from D:/Ruby26-x64/lib/ruby/2.6.0/bundler/spec_set.rb:85:in `map!&apos;&lt;/span&gt;
D:/Ruby26-x64/lib/ruby/2.6.0/bundler/spec_set.rb:91:in &lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;block &lt;span class=&quot;k&quot;&gt;in &lt;/span&gt;materialize&lt;span class=&quot;s1&quot;&gt;&apos;: Could not find public_suffix-3.0.1 in any of the sources (Bundler::GemNotFound)

PS D:\work\github_surinkim\surinkim.github.io&amp;gt; gem install public_suffix -v 3.0.1
Fetching public_suffix-3.0.1.gem
Successfully installed public_suffix-3.0.1
Parsing documentation for public_suffix-3.0.1
Done installing documentation for public_suffix after 0 seconds
1 gem installed
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h4 id=&quot;2-2-패키지-버전-문제&quot;&gt;2-2) 패키지 버전 문제&lt;/h4&gt;
&lt;p&gt;다른 패키지들은 위처럼 수동 설치로 해결됐는데, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ffi&lt;/code&gt; 같은 경우는 필요한 패키지 버전을, 로컬에 설치된 루비 버전에는 설치할 수 없다고 나온다.  이런;;&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;PS D:&lt;span class=&quot;se&quot;&gt;\w&lt;/span&gt;ork&lt;span class=&quot;se&quot;&gt;\g&lt;/span&gt;ithub_surinkim&lt;span class=&quot;se&quot;&gt;\s&lt;/span&gt;urinkim.github.io&amp;gt; jekyll serve &lt;span class=&quot;nb&quot;&gt;.&lt;/span&gt;
        12: from d:/Ruby26-x64/bin/jekyll:23:in &lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;&amp;lt;main&amp;gt;&lt;span class=&quot;s1&quot;&gt;&apos;
        ...
         1: from D:/Ruby26-x64/lib/ruby/2.6.0/bundler/spec_set.rb:85:in `map!&apos;&lt;/span&gt;
D:/Ruby26-x64/lib/ruby/2.6.0/bundler/spec_set.rb:91:in &lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;block &lt;span class=&quot;k&quot;&gt;in &lt;/span&gt;materialize&lt;span class=&quot;s1&quot;&gt;&apos;: Could not find ffi-1.9.18-x64-mingw32 in any of the sources (Bundler::GemNotFound)
PS D:\work\github_surinkim\surinkim.github.io&amp;gt; gem install ffi -v 1.9.18
Fetching ffi-1.9.18-x64-mingw32.gem
ERROR:  Error installing ffi:
        The last version of ffi (= 1.9.18) to support your Ruby &amp;amp; RubyGems was 1.9.18. Try installing it with `gem install ffi -v 1.9.18`
        ffi requires Ruby version &amp;gt;= 2.0, &amp;lt; 2.5. The current ruby version is 2.6.6.146.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;다행히 &lt;a href=&quot;https://stackoverflow.com/questions/49485905/jekyll-install-with-ruby-2-5&quot;&gt;bundle update&lt;/a&gt;로 해결할 수 있다는 글을 보고 실행했더니,&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;PS D:&lt;span class=&quot;se&quot;&gt;\w&lt;/span&gt;ork&lt;span class=&quot;se&quot;&gt;\g&lt;/span&gt;ithub_surinkim&lt;span class=&quot;se&quot;&gt;\s&lt;/span&gt;urinkim.github.io&amp;gt; bundle update
Fetching gem metadata from https://rubygems.org/..........
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies...
Using public_suffix 4.0.5 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;was 3.0.1&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
Using addressable 2.7.0 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;was 2.5.2&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
...
Using ffi 1.13.1 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;x64-mingw32&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;was 1.9.18&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;패키지들이 모두 업데이트 되면서 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ffi&lt;/code&gt;도, 로컬에 설치된 루비 버전에 맞는 1.13.1로 업데이트가 됐다.&lt;/p&gt;

&lt;p&gt;헌데, 지금까지는 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;jekyll serve .&lt;/code&gt; 명령만으로 실행이 됐는데, 이번에는 아래 에러가 뜬다.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;PS D:&lt;span class=&quot;se&quot;&gt;\w&lt;/span&gt;ork&lt;span class=&quot;se&quot;&gt;\g&lt;/span&gt;ithub_surinkim&lt;span class=&quot;se&quot;&gt;\s&lt;/span&gt;urinkim.github.io&amp;gt; jekyll serve &lt;span class=&quot;nb&quot;&gt;.&lt;/span&gt;
Traceback &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;most recent call last&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;:
        10: from d:/Ruby26-x64/bin/jekyll:23:in &lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;&amp;lt;main&amp;gt;&lt;span class=&quot;s1&quot;&gt;&apos;
		...
         1: from D:/Ruby26-x64/lib/ruby/2.6.0/bundler/runtime.rb:31:in `block in setup&apos;&lt;/span&gt;
D:/Ruby26-x64/lib/ruby/2.6.0/bundler/runtime.rb:319:in &lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;check_for_activated_spec!&lt;span class=&quot;s1&quot;&gt;&apos;: You have already activated jekyll-sass-converter 2.1.0, but your Gemfile requires jekyll-sass-converter 1.5.2. Prepending `bundle exec` to your command may solve this. (Gem::LoadError)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;에러 메시지에 나와있는 대로 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bundle exec jekyll serve .&lt;/code&gt;으로 실행하니 사이트가 잘 뜬다.  Gemfile을 수정하는 등의 방법으로 1.5.2를 명시해서 쓰면 해결이 되지 않을까 하는데.. 뭐, 단어 2개 더 타이핑하는 게 힘든 일도 아니고.. 이 정도면 됐다.&lt;/p&gt;
</description>
				<pubDate>Fri, 21 Aug 2020 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2020/08/21/ruby_jekyll_install/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2020/08/21/ruby_jekyll_install/</guid>
			</item>
		
			<item>
				<title>fork한 저장소 업데이트(in git bash)</title>
				        
        <description>&lt;p&gt;자주 쓰지 않다보니 매번 까먹는 명령..&lt;/p&gt;

&lt;p&gt;fork한 저장소에서 아래 명령으로 remote 저장소를 확인한다.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git remote &lt;span class=&quot;nt&quot;&gt;-v&lt;/span&gt;
origin  https://github.com/surinkim/libsourcey.git &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;fetch&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
origin  https://github.com/surinkim/libsourcey.git &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;push&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
upstream        https://github.com/sourcey/libsourcey.git &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;fetch&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
upstream        https://github.com/sourcey/libsourcey.git &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;push&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;지금은 upstream에, fork한 원본 repo가 이미 추가돼있는데, 만약 아직 추가하지 않았다면 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git add&lt;/code&gt;로 추가한다.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git remote &lt;span class=&quot;nt&quot;&gt;-v&lt;/span&gt;
origin  https://github.com/surinkim/libsourcey.git &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;fetch&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
origin  https://github.com/surinkim/libsourcey.git &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;push&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git remote add upstream https://github.com/sourcey/libsourcey.git

&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git remote &lt;span class=&quot;nt&quot;&gt;-v&lt;/span&gt;
origin  https://github.com/surinkim/libsourcey.git &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;fetch&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
origin  https://github.com/surinkim/libsourcey.git &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;push&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
upstream        https://github.com/sourcey/libsourcey.git &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;fetch&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
upstream        https://github.com/sourcey/libsourcey.git &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;push&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fetch&lt;/code&gt;로 upstream repo의 최신 내용을 가져온다.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;hyun@hyun-PC MINGW64 /d/Code/libsourcey &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;master&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git fetch upstream
remote: Enumerating objects: 158, &lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;.&lt;/span&gt;
remote: Counting objects: 100% &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;158/158&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, &lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;.&lt;/span&gt;
remote: Compressing objects: 100% &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;3/3&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, &lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;.&lt;/span&gt;
remote: Total 306 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;delta 155&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, reused 158 &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;delta 155&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, pack-reused 148
Receiving objects: 100% &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;306/306&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, 112.74 KiB | 378.00 KiB/s, &lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;.&lt;/span&gt;
Resolving deltas: 100% &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;188/188&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;, completed with 111 &lt;span class=&quot;nb&quot;&gt;local &lt;/span&gt;objects.
From https://github.com/sourcey/libsourcey
 &lt;span class=&quot;k&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;new branch]        bugfix/libuv -&amp;gt; upstream/bugfix/libuv
 ... 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;upstream의 master branch를 로컬 master branch에 merge한다.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;hyun@hyun-PC MINGW64 /d/Code/libsourcey &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;master&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git merge upstream/master
Updating 48b06a1c..98df3c31
Fast-forward
 .gitattributes                                     |    16 +
 BUILD.md                                           |     9 +-
 Dockerfile                                         |    11 +-
 LibSourcey.cmake                                   |   804 +-
 Makefile                                           |    24 +
 README.md                                          |    30 +-
 ...

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;이제, origin에도 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;push&lt;/code&gt;해주면 끝이다.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git push origin master
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;다음으로, &lt;a href=&quot;https://danielkummer.github.io/git-flow-cheatsheet/&quot;&gt;gitflow&lt;/a&gt;에서 release할 때인데,&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git flow releae start 1.2.0
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git flow release publish 1.2.0
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git flow release finish 1.2.0
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git push origin master
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git push origin develop
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git push origin &lt;span class=&quot;nt&quot;&gt;--tags&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;이건.. &lt;a href=&quot;https://gist.github.com/surinkim/66242959c18ce9b63836e04dc9679ef7&quot;&gt;fork한 gist&lt;/a&gt;를 보는 게 나을거 같고, 요즘은 리눅스 쓸 일도 거의 없으니까, 계속 CLI 고집하지 말고 &lt;a href=&quot;https://git-fork.com/&quot;&gt;Fork&lt;/a&gt;나 &lt;a href=&quot;https://www.syntevo.com/smartgit/&quot;&gt;SmartGit&lt;/a&gt;, &lt;a href=&quot;https://desktop.github.com/&quot;&gt;GitHub Desktop&lt;/a&gt; 같은 GUI 툴도 써보고 익숙해져야겠다.&lt;/p&gt;

</description>
				<pubDate>Sun, 09 Aug 2020 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2020/08/09/forked_repo_update/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2020/08/09/forked_repo_update/</guid>
			</item>
		
			<item>
				<title>vcpkg</title>
				        
        <description>&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vcpkg&lt;/code&gt;는 &lt;strong&gt;리눅스도 지원하는 c++ 전용 패키지 매니저&lt;/strong&gt;라는 큰 의의가 있고, 편리한 점도 많다. 하지만, NuGet처럼 비주얼 스튜디오에 통합되지 않았고, 특정 버전을 지정해서 설치하기 어렵다는 몇 가지 약점도 있다. 개인적으로, 실무에서 vcpkg 쓰는 걸 주저했던 큰 이유는 ‘의존성 설명의 어려움’ 때문이었다.&lt;/p&gt;

&lt;p&gt;예로, 파이썬은 &lt;a href=&quot;https://docs.python.org/ko/3/tutorial/venv.html&quot;&gt;venv&lt;/a&gt;로 프로젝트별 독립 환경을 구성하고, 필요한 패키지를 설치한 다음,&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;pip freeze &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;위 명령으로 이 프로젝트에 필요한 의존성만 뽑아낼 수 있다.&lt;br /&gt;
이제 이 파일만 git에 올려두면, 빌드 pc나 동료 자리에서는&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;pip &lt;span class=&quot;nb&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-r&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;이렇게 필요한 의존성을 설치할 수 있다.&lt;/p&gt;

&lt;p&gt;vcpkg로는 마땅한 방법을 찾지 못했다.
&lt;a href=&quot;https://github.com/microsoft/vcpkg/issues/4935&quot;&gt;작년 7월에 해당 feature에 대한 요청&lt;/a&gt;이 올라왔는데, 마지막 댓글을 봐서는 금방 추가될 것 같진 않다.&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;We have Plans for this, but we need to do quite a bit of design and engineering work, so it’s unlikely to come soon.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;그렇다고, 대안이 아주 없는 건 아닌데…&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;vcpkg integrate project
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;위 명령을 쓰면 현재 설치되어 있는 패키지 정보를 아래와 같이 NuGet 참조 파일로 만들어 주기는 한다.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;C:&lt;span class=&quot;se&quot;&gt;\U&lt;/span&gt;sers&lt;span class=&quot;se&quot;&gt;\h&lt;/span&gt;ukim
&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; vcpkg integrate project
Created nupkg: E:&lt;span class=&quot;se&quot;&gt;\v&lt;/span&gt;cpkg&lt;span class=&quot;se&quot;&gt;\s&lt;/span&gt;cripts&lt;span class=&quot;se&quot;&gt;\b&lt;/span&gt;uildsystems&lt;span class=&quot;se&quot;&gt;\v&lt;/span&gt;cpkg.E.vcpkg.1.0.0.nupkg

With a project open, go to Tools-&amp;gt;NuGet Package Manager-&amp;gt;Package Manager Console and &lt;span class=&quot;nb&quot;&gt;paste&lt;/span&gt;:
    Install-Package vcpkg.E.vcpkg &lt;span class=&quot;nt&quot;&gt;-Source&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;E:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\v&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;cpkg&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\s&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;cripts&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\b&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;uildsystems&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;그렇지만, 이건 특정 프로젝트의 의존성이 아니라 로컬에 설치된 모든 패키지 정보이므로, 수정하지 않으면, 프로젝트에 불필요한 패키지마저 설치할 수 있다.&lt;/p&gt;

&lt;p&gt;그래서, &lt;a href=&quot;https://docs.microsoft.com/ko-kr/cpp/build/vcpkg?view=vs-2019&quot;&gt;vcpkg 문서&lt;/a&gt;에 아래와 같이 설명한다.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;h3 id=&quot;프로젝트-단위&quot;&gt;프로젝트 단위&lt;/h3&gt;
  &lt;p&gt;활성 vcpkg 인스턴스에서 버전과 다른 라이브러리의 특정 버전을 사용해야 하는 경우 다음 단계를 따르세요.&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;vcpkg의 새 클론을 생성합니다.&lt;/li&gt;
    &lt;li&gt;필요한 버전을 가져오도록 라이브러리의 프로필을 수정합니다.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;vcpkg install [library]&lt;/strong&gt;를 실행합니다.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;vcpkg integrate project&lt;/strong&gt;를 사용하여 프로젝트 단위로 해당 라이브러리를 참조하는 NuGet 패키지를 만듭니다.&lt;/li&gt;
  &lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;결국, 패키지의 특정 버전이나 프로젝트에 필요한 패키지만 기술하려면, vcpkg를 하나 더 클론하고 기존 vcpkg의 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;portfile&lt;/code&gt;(한글 문서를 보면 ‘프로필’이라고 되어 있는데, &lt;a href=&quot;https://docs.microsoft.com/en-us/cpp/build/vcpkg?view=vs-2019&quot;&gt;원문&lt;/a&gt;은 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;portfile&lt;/code&gt;이다.)을 수정해서 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;vcpkg integrate project&lt;/code&gt; 명령으로 NuGet 패키지를 뽑아내야 한다. 이게 잘되더라도 다른 위치의 pc와 공유하려면 어딘가에 NuGet 패키지도 올려둬야 한다;;&lt;/p&gt;

&lt;p&gt;이쯤되면, &lt;em&gt;‘난 vcpkg 아니면 안 할래’&lt;/em&gt; 같은 아집이 아니라면, 그리고 사용하려는 라이브러리가 &lt;a href=&quot;https://www.nuget.org/&quot;&gt;NuGet 갤러리&lt;/a&gt;에 이미 올라가 있다면(설사 없더라도, 직접 빌드가 가능하다면 private Nuget 저장소를 운영해도 된다.), 당분간은 고민 없이 NuGet을 쓰는 게 몸과 마음이 편할 것 같다.&lt;/p&gt;

</description>
				<pubDate>Thu, 26 Mar 2020 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2020/03/26/vcpkg/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2020/03/26/vcpkg/</guid>
			</item>
		
			<item>
				<title>git describe로, git 소스 버전을 VC++에서 빌드한 파일 버전으로 자동 연동하기</title>
				        
        <description>&lt;p&gt;&lt;a href=&quot;https://git-scm.com/docs/git-describe&quot;&gt;git describe&lt;/a&gt;는  태그와  커밋  횟수, 축약된  커밋  이름으로  사람이  읽고  구분할  수  있는  버전  정보를  알려준다.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;git describe
v1.0.9-8-gbab53f6
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;v1.0.9-8-gbab53f6&lt;/code&gt;에서 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;v1.0.9&lt;/code&gt;은 현재 태그, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;8-gbab53f6&lt;/code&gt;은 해당 태그부터 8번째 commit이며, 축약된 commit 이름이 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;bab53f6&lt;/code&gt;이라는 뜻이다. 접두사 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;g&lt;/code&gt;는 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git&lt;/code&gt;을 뜻하며 어떤 SCM을 사용하느냐에 따라 다르다. 이 명령을 이용하면 git 저장소의 소스 버전을 VC++ 프로젝트에서 빌드한 파일 버전으로 자동 연동할 수 있다.&lt;/p&gt;

&lt;p&gt;이렇게 하려면, git describe 결과를 얻고 적당한 파일에 버전 정보를 써주는 과정이 필요하다. 이런 역할을 해주는 스크립트는 쉽게 구할 수 있는데 여기서는 &lt;a href=&quot;https://github.com/Thell/git-vs-versioninfo-gen/blob/master/GIT-VS-VERSION-GEN.bat&quot;&gt;이곳의 배치 파일&lt;/a&gt;을 사용한다.&lt;/p&gt;

&lt;p&gt;로컬의 git 저장소 폴더에서 아래와 같이 실행하면&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;.&lt;span class=&quot;se&quot;&gt;\g&lt;/span&gt;it-vs-version-get.bat .&lt;span class=&quot;se&quot;&gt;\v&lt;/span&gt;ersioninfo.h
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;versioninfo.h&lt;/code&gt; 파일을 생성해 준다.&lt;/p&gt;
&lt;div class=&quot;language-c++ highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;//GIT-VS-VERSION-GEN.bat generated resource header.&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#define  GEN_VER_VERSION_STRING  &quot;1.0.9.8.gbab53\0&quot;
#define  GEN_VER_DIGITAL_VERSION  1,0,9,8
#define  GEN_VER_VERSION_HEX  0x0001000000090008
#define  GEN_VER_COMMENT_STRING  &quot;Major Version Release\0&quot;
#define  GEN_VER_PRIVATE_FLAG VS_FF_PRIVATEBUILD
#define  GEN_VER_PRIVATE_STRING  &quot;\0&quot;
#define  GEN_VER_PATCHED_FLAG VS_FF_PATCHED
#define  GEN_VER_PRERELEASE_FLAG  0
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;VC++ 프로젝트에서 이 파일을 사용하도록 설정한다.
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.rc&lt;/code&gt;파일에 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;versioninfo.h&lt;/code&gt;를 include하고, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FILEVERSION&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PRODUCTION&lt;/code&gt;의 값을 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GEN_VER_DIGITAL_VERSION&lt;/code&gt; 매크로 변수로 대체한다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-rc&quot;&gt;/////////////////////////////////////////////////////////////////////////////
//
// Version
//

VS_VERSION_INFO VERSIONINFO
 FILEVERSION GEN_VER_DIGITAL_VERSION
 PRODUCTVERSION GEN_VER_DIGITAL_VERSION
..
..
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;문자열 값이 필요한 곳은 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GEN_VER_VERSION_STRING&lt;/code&gt;을 사용한다.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-rc&quot;&gt;BEGIN
    BLOCK &quot;StringFileInfo&quot;
    BEGIN
        BLOCK &quot;041204b0&quot;
        BEGIN
            ...
            VALUE &quot;FileVersion&quot;, GEN_VER_VERSION_STRING
            ...
            VALUE &quot;ProductVersion&quot;, GEN_VER_VERSION_STRING
        END
...
...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이제 VC++의 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;빌드 전 이벤트&lt;/code&gt;에, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git-vs-version-get.bat&lt;/code&gt;으로 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;versioninfo.h&lt;/code&gt;를 생성하는 과정을 추가해주면, git 저장소의 소스 버전이 VC++ 빌드 파일 버전에 자동 연동된다.&lt;/p&gt;

</description>
				<pubDate>Thu, 13 Feb 2020 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2020/02/13/git_describe_vc_file_sync/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2020/02/13/git_describe_vc_file_sync/</guid>
			</item>
		
			<item>
				<title>(번역서)데이터를 다루며 배우는 파이썬</title>
				        
        <description>&lt;p&gt;&lt;img src=&quot;/img/book_python_data/cover.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;--책소개&quot;&gt;- 책소개&lt;/h4&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;프로그래밍 경험이 없는 사람들에게 프로그래밍을 가르치기 위해 만들어졌다. 파이썬은 문법이 간결하여 프로그래밍을 처음 배우는 사람도 무리 없이 시작할 수 있다. 특히 데이터 문제를 효과적으로 해결할 수 있어 관련 분야에서 파이썬을 활용하는 경우가 많기에, 저자는 비전공자인 학생들을 대상으로 각자의 분야에서 데이터를 다루는 기술을 적용할 수 있도록 데이터 탐색에 초점을 맞추어 파이썬 교과서를 구성했다.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4 id=&quot;--인사이트-2019년-8월-22일&quot;&gt;- 인사이트, 2019년 8월 22일&lt;/h4&gt;

&lt;h4 id=&quot;---구매--예스24--알라딘&quot;&gt;-  구매 : &lt;a href=&quot;http://www.yes24.com/Product/Goods/77401048&quot; target=&quot;_blank&quot;&gt;예스24 &lt;/a&gt;, &lt;a href=&quot;https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=202488085&quot; target=&quot;_blank&quot;&gt;알라딘&lt;/a&gt;&lt;/h4&gt;

&lt;h4 id=&quot;--책-내용-중-잘못됐거나-궁금한-점-있으면-아래에-남겨주세요-nnhopehotmailcom으로-보내주셔도-됩니다&quot;&gt;- 책 내용 중, 잘못됐거나 궁금한 점 있으면 아래에 남겨주세요. nnhope@hotmail.com으로 보내주셔도 됩니다.&lt;/h4&gt;

</description>
				<pubDate>Thu, 22 Aug 2019 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/books/2019/08/22/book_995_python_data/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/books/2019/08/22/book_995_python_data/</guid>
			</item>
		
			<item>
				<title>paho mqtt c/cpp 빌드</title>
				        
        <description>&lt;h3 id=&quot;paho-mqtt-c&quot;&gt;paho mqtt c&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;저장소: https://github.com/eclipse/paho.mqtt.c&lt;/li&gt;
  &lt;li&gt;빌드 방법&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-cpp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;# SSL=TRUE
# STATIC=TRUE
# paho.mqtt.c와 동일 레벨에 openssl 폴더가 있다고 가정한다.
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mkdir&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;build&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;cd&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;build&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;cmake&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;G&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Visual Studio 14 2015&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DOPENSSL_INCLUDE_DIR&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;openssl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;include&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DOPENSSL_LIB&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;openssl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;lib&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DOPENSSLCRYPTO_LIB&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;openssl&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;lib&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DPAHO_BUILD_STATIC&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TRUE&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DPAHO_WINDOWS_BUILD_BIT&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;x86&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DPAHO_WITH_SSL&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TRUE&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;..&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cmake&lt;/code&gt; 빌드를 통해 생성된 솔루션 파일을 열고, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;common_ssl_obj&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pah-mqtt3as-static&lt;/code&gt; 프로젝트를 차례대로 빌드하면 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;paho-mqtt3as-static.lib&lt;/code&gt;가 생성된다.&lt;/p&gt;

&lt;h3 id=&quot;paho-mqtt-cpp&quot;&gt;paho mqtt cpp&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;저장소: https://github.com/eclipse/paho.mqtt.cpp&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;빌드 방법&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-cpp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;# SSL=TRUE
# STATIC=TRUE
&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mkdir&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;build&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;cd&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;build&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;cmake&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;G&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Visual Studio 14 2015&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DPAHO_MQTT_C_INCLUDE_DIRS&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;paho&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mqtt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;src&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DPAHO_MQTT_C_LIBRARIES&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;paho&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mqtt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;c&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;build&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Debug&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;paho&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;mqtt3as&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;static&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;lib&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DPATH_WITH_SSL&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TRUE&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;..&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cmake&lt;/code&gt; 빌드를 통해 생성된 솔루션 파일을 열고, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;paho-cpp-objs&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;paho-mqttpp3-static&lt;/code&gt; 프로젝트를 차례대로 빌드하면 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;paho-mqttp3-static.lib&lt;/code&gt;가 생성된다. 이제 필요한 곳에서 링크하고 사용하면 된다.&lt;/p&gt;

&lt;h4 id=&quot;참고&quot;&gt;참고&lt;/h4&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;openssl&lt;/code&gt;은 1.0.X 버전대와 1.1.X 버전대의 바이너리 이름이 다르다.&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;1.0.X: libeay32XX.dll, ssleay32XX.dll&lt;/li&gt;
    &lt;li&gt;1.1.X: libcryptoXX.dll, libsslXX.dll&lt;/li&gt;
  &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href=&quot;[https://www.npcglib.org/~stathis/blog/precompiled-openssl/](https://www.npcglib.org/~stathis/blog/precompiled-openssl/)&quot;&gt;여기서&lt;/a&gt; openssl pre built 바이너리를 받을 수 있다.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
				<pubDate>Tue, 23 Jul 2019 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2019/07/23/how_to_build_paho_mqtt/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2019/07/23/how_to_build_paho_mqtt/</guid>
			</item>
		
			<item>
				<title>code sign 인증서 만료</title>
				        
        <description>&lt;p&gt;아래처럼 -t 옵션을 주고 code sign을 했다면, 인증서 만료 시간이 도래한다고 해서, 이미 배포한 바이너리를 새로 sign하고 다시 배포할 필요는 없다.&lt;br /&gt;
그러니까, code sign했던 시점에 유효한 인증서였다면, 인증서 기간이 만료되어도 계속 유효한 게시자로 표시된다.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nt&quot;&gt;-t&lt;/span&gt; http://timestamp.verisign.com/scripts/timstamp.dl
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h4 id=&quot;참고&quot;&gt;참고:&lt;/h4&gt;

&lt;blockquote&gt;
  &lt;p&gt;VeriSign Code Signing Certificates include an optional timestamp to extend the life of your digital signatures.
Your code will remain valid even if your code signing certificate expires, because the validity of the code signing certificate at the time of the digital signature can be verified
http://www.symantec.com/theme.jsp?themeid=code-signing-information-center&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;Timestamping ensures that code will not expire when certificate expires.
If your code is timestamped the digital signature is valid even though the certificate has expired.
A new certificate is only necessary if you want to sign additional code. If you did not use the timestamping option during the signing, you must re-sign your code and re-send it out to your customers.
http://www.instantssl.com/code-signing/code-signing-faq.html&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;Timestamping ensures that code will not expire when the certificate expires because the browser validates the timestamp.
The timestamping service is provided courtesy of VeriSign. If you use the timestamping service when signing code, a hash of your code is sent to VeriSign’s server to record a timestamp for your code.&lt;br /&gt;
https://search.thawte.com/support/ssl-digital-certificates/index?page=content&amp;amp;id=AR1119&lt;/p&gt;
&lt;/blockquote&gt;
</description>
				<pubDate>Fri, 12 Jul 2019 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2019/07/12/code_sign_certificate_expired/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2019/07/12/code_sign_certificate_expired/</guid>
			</item>
		
			<item>
				<title>정적 파일 Hosting(Node.js + Windows 서비스)</title>
				        
        <description>&lt;h2 id=&quot;connect-serverstatic&quot;&gt;Connect, ServerStatic&lt;/h2&gt;

&lt;p&gt;html 문서 몇 개를 간단히 호스팅 하고 싶을 때는 &lt;a href=&quot;https://www.npmjs.com/package/serve&quot;&gt;serve&lt;/a&gt;나,
&lt;a href=&quot;https://www.npmjs.com/package/connect&quot;&gt;connect&lt;/a&gt;/&lt;a href=&quot;https://www.npmjs.com/package/serve-static&quot;&gt;serve-static&lt;/a&gt;을 쓰면 편하다.&lt;/p&gt;

&lt;p&gt;여기서는 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;connect + serve-static&lt;/code&gt; 조합을 윈도우 서비스로 등록해서 사용하는 방법을 정리한다.&lt;/p&gt;

&lt;h3 id=&quot;http_serverjs&quot;&gt;http_server.js&lt;/h3&gt;

&lt;p&gt;호스팅 하려는 폴더가 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;D:\work\public&lt;/code&gt;이라고 하면, 해당 폴더에 아래와 같이 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;http_server.js&lt;/code&gt; 파일을 만든다.&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;finalhandler&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;finalhandler&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;http&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;http&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;serveStatic&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;serve-static&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// Serve up public folder&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;serve&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;serveStatic&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;D:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;work&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;index.html&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;index.html&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]})&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// Create server&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;server&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;http&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;createServer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;onRequest&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;serve&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;finalhandler&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;res&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// Listen&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;listen&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;Server running on 3000 ...&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;node-windows&quot;&gt;node-windows&lt;/h3&gt;
&lt;p&gt;다음으로 node.js를 윈도우 서비스로 등록해 주는 &lt;a href=&quot;https://github.com/coreybutler/node-windows&quot;&gt;node-windows&lt;/a&gt;를 설치한다.&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;g&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;windows&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;link&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;windows&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;setup_win_servicejs&quot;&gt;setup_win_service.js&lt;/h3&gt;

&lt;p&gt;윈도우 서비스로 등록하기 위해 아래 스크립트를 만든다.&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Service&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;require&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;node-windows&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Service&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// Create a new service object&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;svc&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Service&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;YourServiceName&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;YourServiceDesc&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;D:&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;work&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;http_server.js&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// Listen for the &quot;install&quot; event, which indicates the&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// process is available as a service.&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;svc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;on&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;install&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;svc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;start&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

&lt;span class=&quot;nx&quot;&gt;svc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;install&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;실행한다.&lt;/p&gt;
&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;node&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;setup_win_service&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;js&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;윈도우 서비스 관리자에 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;YourServiceName&lt;/code&gt; 서비스가 등록되고 자동 실행된다.
브라우저에서 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;http://localhost:3000/your.html&lt;/code&gt;로 열 수 있다.&lt;/p&gt;

&lt;h4 id=&quot;참고&quot;&gt;참고:&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/10547974/how-to-install-node-js-as-windows-service&quot;&gt;StackOverFlow 1&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://stackoverflow.com/questions/6084360/using-node-js-as-a-simple-web-server&quot;&gt;StackOverFlow 2&lt;/a&gt;&lt;/p&gt;

</description>
				<pubDate>Wed, 29 May 2019 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2019/05/29/hosting_static_files_with_winservice/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2019/05/29/hosting_static_files_with_winservice/</guid>
			</item>
		
			<item>
				<title>(번역서)파이썬 마이크로서비스</title>
				        
        <description>&lt;p&gt;&lt;img src=&quot;/img/book_python_msd/cover.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;--책소개&quot;&gt;- 책소개&lt;/h4&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;파이썬을 사용해서 마이크로서비스의 설계부터 코딩, 테스트, 배포까지 전반적인 과정을 다룬다. 모질라(Mozilla)에서 파이썬 개발자로 활동하는 저자의 풍부한 경험과 샘플 프로젝트 개발 과정을 따라가면서, 모범 사례와 주의 사항을 배울 수 있다. 또한 파이썬 생태계의 다양한 라이브러리 활용법도 살펴본다.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4 id=&quot;--에이콘출판사-2019년-5월-17일&quot;&gt;- 에이콘출판사, 2019년 5월 17일&lt;/h4&gt;

&lt;h4 id=&quot;--예제-코드-github-&quot;&gt;- &lt;a href=&quot;https://github.com/surinkim/python_msd_kor&quot; target=&quot;_blank&quot;&gt;예제 코드 github &lt;/a&gt;&lt;/h4&gt;

&lt;h4 id=&quot;---구매--예스24--알라딘&quot;&gt;-  구매 : &lt;a href=&quot;http://www.yes24.com/Product/Goods/73161840&quot; target=&quot;_blank&quot;&gt;예스24 &lt;/a&gt;, &lt;a href=&quot;https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=191830482&quot; target=&quot;_blank&quot;&gt;알라딘&lt;/a&gt;&lt;/h4&gt;

&lt;h4 id=&quot;--책-내용-중-잘못됐거나-궁금한-점-있으면-아래에-남겨주세요-nnhopehotmail로-보내주셔도-됩니다&quot;&gt;- 책 내용 중, 잘못됐거나 궁금한 점 있으면 아래에 남겨주세요. nnhope@hotmail로 보내주셔도 됩니다.&lt;/h4&gt;

</description>
				<pubDate>Fri, 17 May 2019 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/books/2019/05/17/book_996_python_mcs_development/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/books/2019/05/17/book_996_python_mcs_development/</guid>
			</item>
		
			<item>
				<title>QLatin1String vs QStringLiteral</title>
				        
        <description>&lt;h2 id=&quot;qlatin1string&quot;&gt;QLatin1String&lt;/h2&gt;
&lt;p&gt;Qt 함수가 매개 변수로, QString 이외에  QLatin1String도 받는다면, QLatin1String을 사용하는 것이 빠르다.&lt;/p&gt;

&lt;div class=&quot;language-c++ highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;startsWith&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Now&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;                  &lt;span class=&quot;c1&quot;&gt;// 1)&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;s&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;startsWith&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;QLatin1String&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Now&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;   &lt;span class=&quot;c1&quot;&gt;// 2) better&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;QString의 &lt;a href=&quot;https://doc.qt.io/qt-5/qstring.html#startsWith-3&quot;&gt;startsWith 함수&lt;/a&gt;는 const QString&amp;amp;, &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;QLatin1String&lt;/code&gt;&lt;/strong&gt; 등의 형식을 매개 변수로 받도록 오버로딩 되어있다. const char*를 받는 오버로딩은 없다.&lt;/p&gt;

&lt;p&gt;따라서, 1)번 코드에서는 const char* 에서 QString 으로 암시적 변환이 발생한다. QString의 내부 데이터 멤버인 QStringData가, &lt;em&gt;“Now”&lt;/em&gt; 문자열을 담을 수 있을 만큼 충분한 크기로, malloc으로 할당되고 문자열 리터럴이 복사된다. 그리고, Qt에서 char*는 UTF-8, QString은 UTF-16으로 저장되므로, UTF-8에서 UTF-16 으로 변환도 발생한다.&lt;/p&gt;

&lt;p&gt;2)번에서는 &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;QLatin1String&lt;/code&gt;&lt;/strong&gt; 형식을 인수로 넘긴다. 위에서 말했듯이, Qt에서 char* 는 UTF-8로 저장되는데, 대부분의 알고리즘은 UTF-8보다, ASCII나 latin1에서 훨씬 빠르다. &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;QLatin1String&lt;/code&gt;&lt;/strong&gt; 은 char*를 감싸면서 인코딩 형식만 지정된 얇은 래퍼다. 그래서, startsWith 처럼,  &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;QLatin1String&lt;/code&gt;&lt;/strong&gt;을 매개변수로 받는 함수에서는 변환 과정 없이, 원래 latin1 데이터 그대로 빠르게 처리가 가능하다.&lt;/p&gt;

&lt;h2 id=&quot;qstringliteral&quot;&gt;QStringLiteral&lt;/h2&gt;
&lt;p&gt;그런데, &lt;a href=&quot;https://doc.qt.io/qt-5/qobject.html#objectName-prop&quot;&gt;setObjectName 함수&lt;/a&gt;나 &lt;a href=&quot;https://doc.qt.io/qt-5/qurl.html#QUrl-2&quot;&gt;QUrl 클래스 생성자&lt;/a&gt;는 QString만 받는다.&lt;br /&gt;
이럴 때는, &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;QStringLiteral&lt;/code&gt;&lt;/strong&gt; 을 사용할 수 있다. &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;QStringLiteral&lt;/code&gt;&lt;/strong&gt;을 사용하면 런타임이 아닌, 컴파일 타임에 QString을 생성한다. 따라서, 런타임 성능을 향상 시킬 수 있지만, 반대로 바이너리 크기와 메모리 오버헤드가 증가한다.&lt;/p&gt;

&lt;p&gt;이런 이유로, 함수에 과부하가 있는 경우, QString만 받는 함수에 &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;QStringLiteral&lt;/code&gt;&lt;/strong&gt; 대신, &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;QLatin1String&lt;/code&gt;&lt;/strong&gt; 타입을 넘겨서, 컴파일 타임이 아니라 런타임에 &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;QLatin1String&lt;/code&gt;&lt;/strong&gt;에서 QString의 암시적 변환이 발생하도록 하는 경우도 있다.&lt;/p&gt;

&lt;h3 id=&quot;결론은&quot;&gt;결론은,&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;QLatin1String&lt;/code&gt;&lt;/strong&gt; 을 먼저 떠올리자. &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;QLatin1String&lt;/code&gt;&lt;/strong&gt;을 쓰면 QString 객체 생성 및 문자열 복사/인코딩 변환 과정을 피할 수 있다.&lt;/li&gt;
  &lt;li&gt;QString 타입만 허용하는 함수라면, 런타임 오버헤드가 없는 &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;QStringLiteral&lt;/code&gt;&lt;/strong&gt;을 생각하자.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;참고&quot;&gt;참고:&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.qt.io/blog/2014/06/13/qt-weekly-13-qstringliteral/&quot;&gt;Qt Weekly #13: QStringLiteral&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://woboq.com/blog/qstringliteral.html&quot;&gt;QStringLiteral explained - woboq&lt;/a&gt;&lt;/p&gt;

</description>
				<pubDate>Sat, 23 Mar 2019 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2019/03/23/qlatin1string_qstringliteral/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2019/03/23/qlatin1string_qstringliteral/</guid>
			</item>
		
			<item>
				<title>gen-cef-vsproj, gen-grpc-vsproj</title>
				        
        <description>&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cef&lt;/code&gt;를 한 번 빌드하려면, &lt;a href=&quot;http://opensource.spotify.com/cefbuilds/index.html&quot;&gt;CEF Prebuilt&lt;/a&gt; 사이트에서 다운로드, 압축 해제, CMake 빌드, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libcef_dll_wrapper&lt;/code&gt; 빌드까지 손이 많이 간다.&lt;br /&gt;
그래서, 가져올 Standard Distribution 버전 파일 링크만 입력해주면, 위의 동작을 자동으로 처리하는 배치 파일을 만들었다.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/surinkim/gen-cef-vsproj&quot;&gt;https://github.com/surinkim/gen-cef-vsproj&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;아래처럼 쓰면 된다.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;.&lt;span class=&quot;se&quot;&gt;\S&lt;/span&gt;tart.bat http://opensource.spotify.com/cefbuilds/cef_binary_3.3626.1882.g8926126_windows32.tar.bz2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;grpc&lt;/code&gt;도 복잡하다. 아래 배치 파일은 gen-cef-vsproj와 비슷하게 동작한다.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/surinkim/gen-grpc-vsproj&quot;&gt;https://github.com/surinkim/gen-grpc-vsproj&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/grpc/grpc/tags&quot;&gt;grpc Tags&lt;/a&gt;에서 가져올 태그 번호를 확인한 후, 아래와 같이 입력한다.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;.&lt;span class=&quot;se&quot;&gt;\A&lt;/span&gt;llInOne.bat v1.17.2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;grpc는 &lt;a href=&quot;https://github.com/Microsoft/vcpkg/tree/master/ports&quot;&gt;vcpkg&lt;/a&gt;에서 지원하지만, cef는 아직 포함돼있지 않다. 그래서 이렇게 아까운 시간을…&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;02/19 추가: NuGet package로 지원하는 &lt;a href=&quot;https://github.com/cefsharp/cef-binary&quot;&gt;cef-binary&lt;/a&gt;는 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libcef_dll_wrapper.lib&lt;/code&gt;를 별도로 빌드해야 하고, include 폴더도 직접 가져와야 하는 것 같다.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
				<pubDate>Mon, 18 Feb 2019 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2019/02/18/automatic_build_for_cef_grpc/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2019/02/18/automatic_build_for_cef_grpc/</guid>
			</item>
		
			<item>
				<title>(번역서)실전 스케일링 파이썬 프로그래밍</title>
				        
        <description>&lt;p&gt;&lt;img src=&quot;/img/book_python_scaling/cover.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;--책소개&quot;&gt;- 책소개&lt;/h4&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;고성능 파이썬 애플리케이션을 만들기 위한 지침, 팁, 모범 사례뿐 아니라 관련 주제에 관한 전문가들의 인터뷰를 제공한다. CPU 확장, 큐를 사용한 분산, 예외 처리, 잠금 관리, PaaS 배포, 분산 시스템 테스트, 캐싱, 성능 등을 다룬다.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4 id=&quot;--인사이트-2018년-8월-21일&quot;&gt;- 인사이트, 2018년 8월 21일&lt;/h4&gt;

&lt;h4 id=&quot;--예제-코드-github-&quot;&gt;- &lt;a href=&quot;https://github.com/surinkim/scaling_python_kor&quot; target=&quot;_blank&quot;&gt;예제 코드 github &lt;/a&gt;&lt;/h4&gt;

&lt;h4 id=&quot;---구매--예스24--알라딘&quot;&gt;-  구매 : &lt;a href=&quot;http://www.yes24.com/24/goods/63747074?scode=032&amp;amp;OzSrank=1&quot; target=&quot;_blank&quot;&gt;예스24 &lt;/a&gt;, &lt;a href=&quot;http://www.aladin.co.kr/shop/wproduct.aspx?ItemId=163437128&quot; target=&quot;_blank&quot;&gt;알라딘&lt;/a&gt;&lt;/h4&gt;

&lt;h4 id=&quot;--책-내용-중-잘못됐거나-궁금한-점-있으면-아래에-남겨주세요-nnhopehotmailcom으로-보내주셔도-됩니다&quot;&gt;- 책 내용 중, 잘못됐거나 궁금한 점 있으면 아래에 남겨주세요. nnhope@hotmail.com으로 보내주셔도 됩니다.&lt;/h4&gt;

</description>
				<pubDate>Tue, 21 Aug 2018 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/books/2018/08/21/book_997_python_scaling/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/books/2018/08/21/book_997_python_scaling/</guid>
			</item>
		
			<item>
				<title>로그스태시 date, fingerprint 필터</title>
				        
        <description>&lt;p&gt;로그스태시로 수집한 데이터가 앨라스틱서치에 쌓일 때, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@timestamp&lt;/code&gt; 값에는 로그가 수집되는 현재 시간이 디폴트로 설정된다.
실시간으로 수집되는 로그라면 별 문제가 없겠지만, 이런 저런 이유로 로그에 포함돼 있는 시간과 실제로 로그스태시가 
수집하는 시간의 차이가 크다면, &lt;strong&gt;date&lt;/strong&gt; 필터를 활용해서 현재 시간 대신, 로그에 포함돼 있는 타임스탬프 값이 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@timestamp&lt;/code&gt;에 설정되도록 할 수 있다.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-logstash&quot;&gt;## case 1)로그 형식이 아래와 같을 때(json)
## {&quot;log_time&quot;:&quot;2018-07-25 12:22:02&quot;}

filter {
  json {
    source =&amp;gt; &quot;message&quot;
  }
  
  date {
    match =&amp;gt; [&quot;log_time&quot;, &quot;YYYY-MM-dd HH:mm:ss&quot;]
  }

}


## case 2)로그 형식이 아래와 같을 때
## 2016-12-19 00:00:05.908 [error] &amp;lt;127.0.0.1&amp;gt; sample data 

filter {

    ## grok 패턴에서 로그 시간을 time 필드로 매칭 시킨다.
    grok {
        match =&amp;gt; { &quot;message&quot; =&amp;gt; &quot;%{TIMESTAMP_ISO8601:time} \[%{LOGLEVEL:level}\] \&amp;lt;%{IP:ip}\&amp;gt; %{GREEDYDATA:contents}&quot; }
    }
    
    ## date 필터를 사용해서 @timestamp 값에 time 필드 값이 설정되도록 한다.
    date {
        
        match =&amp;gt; [&quot;time&quot;, &quot;ISO8601&quot;]     
        
        ## time 필드를 더 이상 사용하지 않는다면 제거한다.
        remove_field =&amp;gt; [&quot;time&quot;]
    }

}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;한편, 여러 복잡한 상황상, 동일 데이터가 여러 로그 파일에 들어가 있다면…엘라스틱서치에도 중복해서 들어가게 된다.
이때는 &lt;strong&gt;fingerprint&lt;/strong&gt; 필터를 사용해서 동일 데이터의 중복 적재를 막을 수 있다. 해시값을 생성하기 때문에 사용하지 않을 때보다 수집 시간은 길어진다.&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-logstash&quot;&gt;
filter {

  ...

 # for remove that duplicate log
    fingerprint {
        method =&amp;gt; &quot;SHA1&quot;
        key =&amp;gt; &quot;KEY&quot;
    }
}


output {
    elasticsearch {
        hosts =&amp;gt; [&quot;localhost:9200&quot;]
        index =&amp;gt; &quot;demo_log&quot;
        document_id =&amp;gt; &quot;%{fingerprint}&quot;
        
    }
    stdout { codec =&amp;gt; rubydebug }
}


&lt;/code&gt;&lt;/pre&gt;
</description>
				<pubDate>Thu, 26 Jul 2018 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2018/07/26/logstash_filter/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2018/07/26/logstash_filter/</guid>
			</item>
		
			<item>
				<title>CEF sub process 샘플</title>
				        
        <description>&lt;p&gt;cef는 chrome과 동일하게 멀티 프로세스로 동작한다. 만약, all.exe를 만들어 실행하더라도, 보통 3개의 all.exe 프로세스가 생성되며 각각 browser(&lt;strong&gt;main&lt;/strong&gt;), renderer/gpu(&lt;strong&gt;sub&lt;/strong&gt;) 프로세스 역할을 담당한다. &lt;br /&gt;
배틀넷 런처, LOL 클라이언트 등 대부분의 cef 애플리케이션은 main 프로세스 전용의 exe(예를 들어, host.exe)와 renderer/gpu 전용의 exe(예를 들어, sub.exe)를 만들어 사용한다. &lt;br /&gt;
이렇게 하면, host에 주요 로직을 두고, sub에 메시지 라우터 같은, 자바스크립트와의 연동 처리를 둬서 코드를 분리할 수 있다.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://bitbucket.org/chromiumembedded/cef/wiki/GeneralUsage#markdown-header-entry-point-function&quot;&gt;이 페이지&lt;/a&gt;를 참고해서 간단히 샘플을 만들었는데, &lt;a href=&quot;https://github.com/surinkim/cef_sub_process&quot;&gt;여기서&lt;/a&gt; 확인할 수 있다. vs2015 솔루션이 들어있고 빌드 환경은 x64/debug만 설정했다.&lt;/p&gt;

&lt;p&gt;디버그 버전 libcef.dll 크기가 100M가 넘기 때문에 clone 할 때, 조금 기다려야 한다.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;github에는 50M가 넘어가는 파일은 올릴 수 없는데, &lt;a href=&quot;https://git-lfs.github.com/&quot;&gt;Git LFS&lt;/a&gt;를 사용하면 소스 코드처럼 빈번하게 변경되는 파일들과 구분해서, 덩치 큰 바이너리 파일도 올릴 수 있다.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;sub.exe 빌드 후, post build event로 manifest를 추가하는 과정이 있는데, 이 과정을 skip 하면 윈도우 10에서는 웹 페이지가 보이지 않는다. 윈도우 7에서는 제대로 보인다.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
				<pubDate>Fri, 29 Jun 2018 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2018/06/29/cef_sub_process_sample/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2018/06/29/cef_sub_process_sample/</guid>
			</item>
		
			<item>
				<title>Telegram desktop 빌드</title>
				        
        <description>&lt;p&gt;Telegram은 pc 및 모바일 버전 클라이언트 소스를 github에 공개하고 있다.
Telegram 역시 Qt를 사용하고 있기 때문에 참고할 내용이 많겠다 싶어 pc 버전을 받아서 빌드해봤다.&lt;/p&gt;

&lt;p&gt;대부분은 &lt;a href=&quot;https://github.com/telegramdesktop/tdesktop/blob/dev/docs/building-msvc.md&quot;&gt;Build instructions for Visual Studio 2017&lt;/a&gt;을 따라하고,
다음 몇 가지만 주의하면 된다.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;VS2017 설치할 때, ‘개별 구성 요소’에서 ‘UWP용 Windows 10 SDK(10.0.16299.0):C++’도 설치한다. 이때, C#, VB, JS 버전도 같이 설치된다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;cmake의 현재 버전은 3.11.X다. 그런데, 이 버전을 설치하면 openal 빌드가 실패한다. 이미 &lt;a href=&quot;https://github.com/kcat/openal-soft/commit/cae4b1a062b53dd25eba7caa41622be730106749&quot;&gt;패치&lt;/a&gt;는 됐지만, 아직 릴리즈가 안됐다. 그래서, cmake를 3.10.3으로 설치했다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;nasm 경로도 path에 추가해줘야 ffmpeg 빌드가 성공한다.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;솔루션 생성을 하고 vs2017로 빌드하면 3개의 에러가 발생한다. 그런데, C2220(모든 경고를 오류로 처리)에러로 인해 연달아 발생하는 오류들이므로, 이 에러만 잡으면 된다. 제대로 하려면 모든 경고를 잡아야 하지만, 우선은 &lt;strong&gt;빌드 성공이 목적&lt;/strong&gt;이므로 옵션에서 ‘경고를 오류로 처리 안함.(WX-)’으로 다시 빌드했다. 그런데…여전히 동일한 에러가 발생한다. ‘명령줄 - 모든 옵션’에서도 WX- 플래그가 제대로 설정된 것을 확인했는데 여전히 동일하다. 잠깐 고민하다가..지금은 &lt;strong&gt;빌드 성공이 목적&lt;/strong&gt;이므로 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;#pragma warning(disable:4566)&lt;/code&gt;으로 처리했다.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Telegram.exe&lt;/code&gt; 파일은 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$tdesktop\out\debug\&lt;/code&gt; 폴더에 생성된다. 속성-디버깅-명령에 exe를 연결하면 디버깅 모드로 돌려볼 수 있다.&lt;/p&gt;
</description>
				<pubDate>Mon, 28 May 2018 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2018/05/28/build_telegram_desktop/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2018/05/28/build_telegram_desktop/</guid>
			</item>
		
			<item>
				<title>정규표현식</title>
				        
        <description>&lt;h3 id=&quot;정규-표현식으로-c-클래스-이름-표현하기&quot;&gt;정규 표현식으로 C++ 클래스 이름 표현하기&lt;/h3&gt;

&lt;p&gt;유효한 C++ 클래스 이름을 정규 표현식으로 나타내자면 아래처럼 쓸 수 있다.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;^[A-Za-z_][A-za-z0-9]*
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;^&lt;/strong&gt;(caret): string 시작이 일치해야 함을 뜻한다. 여기서는 대, 소문자 구분없이 a에서 z 사이의 문자 혹은 _(under-score)로 시작하는 것을 매칭한다.
    &lt;blockquote&gt;
      &lt;p&gt;[^abc] :  caret이 대괄호 안에 쓰이는 경우는 a, b, c를 제외한 문자를 매칭한다.&lt;/p&gt;
    &lt;/blockquote&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;E&lt;/strong&gt;*: 검색시에 사용하는 wild-card와 같은 의미로 쓴다. 0번 또는 여러번 매칭되는 것을 의미한다. 자주 오용되는 경우로, ‘1개 이상의 white-space로 끝나는 문자열’을 매칭시킬 때, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\s*$&lt;/code&gt;를 사용하는데, 이는 결국 ‘0개 또는 여러 개의 white-space로 끝나는 문자열’을 의미하므로, 모든 문자열이 매칭된다. 올바르게 사용하려면 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\s+$&lt;/code&gt; 처럼 사용해야 한다.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;c-sample-code&quot;&gt;c++ sample code&lt;/h4&gt;
&lt;div class=&quot;language-c++ highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;regex&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;pattern&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;^[A-Za-z_][A-Za-z0-9]*&quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Is Match : &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;regex_match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;12&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;  &lt;span class=&quot;n&quot;&gt;pattern&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//Is Match : 0&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Is Match : &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;regex_match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;_12&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pattern&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//Is Match : 1&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Is Match : &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;regex_match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;*A&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;  &lt;span class=&quot;n&quot;&gt;pattern&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//Is Match : 0&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Is Match : &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;regex_match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;AB&amp;amp;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pattern&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;//Is Match : 0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;0부터-99까지의-수로-시작하고-끝나는-문자열&quot;&gt;0부터 99까지의 수로 시작하고 끝나는 문자열&lt;/h3&gt;

&lt;p&gt;아래 4개의 정규 표현식은 모두 동일하게 0부터 99까지의 수로 시작해서 끝나는 문자열을 나타낸다.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;//method 1
^[0-9]{1,2}

//method 2
^\d{1,2}$

//method 3
^\d\d{0,1}$

//method 4
^\d\d?$
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;method 1&lt;/p&gt;

    &lt;p&gt;&lt;strong&gt;{}&lt;/strong&gt;: quantifier, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;x{1,2}&lt;/code&gt;는 x가 1번 이상, 2번 이하로 나타나야 매칭되는 것을 의미.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;method 2&lt;/p&gt;

    &lt;p&gt;&lt;strong&gt;\d&lt;/strong&gt;: [0-9]와 동일 의미.
  &lt;strong&gt;E$&lt;/strong&gt;: 문자열의 끝이 E로 끝나야 함을 의미.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;method 3&lt;/p&gt;

    &lt;p&gt;시작은 숫자 1개, 끝은 숫자가 없거나 1개.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;method 4&lt;/p&gt;

    &lt;p&gt;&lt;strong&gt;?&lt;/strong&gt;: {0,1}과 같은 의미. 
  문자열 시작은 숫자로 시작하며, 이어서 숫자가 0번 혹은 1번 나오고 종료하는 문자열을 의미한다.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;특정-문자열-찾기&quot;&gt;특정 문자열 찾기&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;letter|mail&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;|&lt;/code&gt;은 or를 의미. 따라서 mail 이나 letter를 포함하는 문자열이 매칭됨.&lt;/p&gt;

&lt;div class=&quot;language-c++ highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;//qt&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;QRegularExpression&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;re&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;letter|mail&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;qDebug&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;re&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;email&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hasMatch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;       &lt;span class=&quot;c1&quot;&gt;// true&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;qDebug&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;re&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;mailbox&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hasMatch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;     &lt;span class=&quot;c1&quot;&gt;// true&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;qDebug&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;re&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;mail&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hasMatch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;        &lt;span class=&quot;c1&quot;&gt;// true&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;qDebug&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;re&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;letters&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hasMatch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;     &lt;span class=&quot;c1&quot;&gt;// true&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;//c++11&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;regex&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;pattern&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;letter|mail&quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;regex_search&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;email&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pattern&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;endl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;    &lt;span class=&quot;c1&quot;&gt;// 1&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;regex_search&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;mailbox&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pattern&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;endl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;// 1&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;regex_search&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;mail&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pattern&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;endl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;     &lt;span class=&quot;c1&quot;&gt;// 1&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;regex_search&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;letters&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pattern&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;endl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;// 1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&lt;/p&gt;

  &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;std::regex_match&lt;/code&gt;는 전체 입력이 모두 매칭될 때만 true를 반환한다. 
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;std::regex_search&lt;/code&gt;는 입력의 일부분만 매칭되도 true를 반환한다.
따라서, 위 코드에서 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;std::regex_match&lt;/code&gt;를 사용했다면 “mail”과 비교한 경우만 true고, 나머지는 false다.  &lt;a href=&quot;http://stackoverflow.com/questions/26696250/difference-between-stdregex-match-stdregex-search&quot;&gt;StackOverFlow&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\b(letter|mail)\b&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;()&lt;/code&gt;은 capture하려고 하는 부분을 명시.  소괄호로 묶음으로써 더 복잡한 정규 표현식을 사용할 수 있다.
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\b&lt;/code&gt;는 단어의 시작과 끝을 매칭하는 word boundary를 뜻함.&lt;/p&gt;
&lt;div class=&quot;language-c++ highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;//qt&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;QRegularExpression&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;re&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;b(letter|mail)&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;b&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;qDebug&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;re&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;email&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hasMatch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;       &lt;span class=&quot;c1&quot;&gt;// false&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;qDebug&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;re&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;mailbox&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hasMatch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;     &lt;span class=&quot;c1&quot;&gt;// false&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;qDebug&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;re&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;mail&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hasMatch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;        &lt;span class=&quot;c1&quot;&gt;// true&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;qDebug&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;re&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;letters&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hasMatch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;     &lt;span class=&quot;c1&quot;&gt;// false&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;qDebug&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;re&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;match&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;letter&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hasMatch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;      &lt;span class=&quot;c1&quot;&gt;// true&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;//c++11&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;regex&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;pattern&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;b(letter|mail)&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\\&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;b&quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;regex_search&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;email&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pattern&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;endl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;    &lt;span class=&quot;c1&quot;&gt;// 0&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;regex_search&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;mailbox&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pattern&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;endl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;// 0&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;regex_search&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;mail&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pattern&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;endl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;     &lt;span class=&quot;c1&quot;&gt;// 1&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;regex_search&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;letters&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pattern&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;endl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;  &lt;span class=&quot;c1&quot;&gt;// 0&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;regex_search&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;letter&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pattern&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;endl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;   &lt;span class=&quot;c1&quot;&gt;// 1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;amp;(?!amp;)&lt;/code&gt;&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;(?!XX)&lt;/code&gt; :  negative lookahead. XX를 제외한 패턴을 매칭함. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;amp;(?!amp;)&lt;/code&gt;는 &amp;amp;를 찾되, 뒤에 amp;가 없는 패턴을 매칭한다는 의미.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Eric과 Eirik을 찾는 경우&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\b(Eric|Eirik)\b&lt;/code&gt; : Ericsson 같은 문자열을 제외하기 위해서 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\b&lt;/code&gt;(word boundary) 필요.&lt;/p&gt;

    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;\bEi?ri[ck]\b&lt;/code&gt; : Eric과 Eirik이 매칭되지만, Erik, Eiric 같은 문자열도 매칭된다.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;http://doc.qt.io/qt-4.8/qregexp.html&quot;&gt;참고 1) QT QRegExp&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://regex101.com/&quot;&gt;참고 2) regex101.com/&lt;/a&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 30 Apr 2018 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2018/04/30/regular-expression/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2018/04/30/regular-expression/</guid>
			</item>
		
			<item>
				<title>Cowboy, Rebar3, Travis CI</title>
				        
        <description>&lt;p&gt;얼랭 Cowboy, Rebar3(+ hex)로 간단한 웹 서버를 만들어 Travis CI를 연동했다.&lt;/p&gt;

&lt;p&gt;Rebar3를 사용하면, 얼랭 프로젝트의 의존성 관리, 구성, 배포 파일 생성 등을 쉽게 할 수 있다. &lt;a href=&quot;https://hex.pm&quot;&gt;hex&lt;/a&gt;은 파이썬의 PyPI와 같은, 얼랭 패키지 관리자다.&lt;/p&gt;

&lt;p&gt;Rebar3 설치와 실행 및 hex 사용법은 아래 글을 참고하면 어려울 건 없다.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://medium.com/erlang-central/building-your-first-erlang-app-using-rebar3-25f40b109aad&quot;&gt;Building Your First Erlang App Using Rebar3&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://davekuhlman.org/rebar3-cowboy-rest-template.html&quot;&gt;A rebar3 Cowboy REST app and a template&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;몇 가지 문제가 있었는데, 우선&lt;/p&gt;

&lt;h4 id=&quot;hex-사용을-위해-rebarconfig에-아래-설정을-추가하면&quot;&gt;hex 사용을 위해 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rebar.config&lt;/code&gt;에 아래 설정을 추가하면,&lt;/h4&gt;
&lt;div class=&quot;language-config highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;{&lt;span class=&quot;n&quot;&gt;plugins&lt;/span&gt;, [&lt;span class=&quot;n&quot;&gt;rebar3_hex&lt;/span&gt;]}.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;아래 에러가 발생했다.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;rebar3 update
&lt;span class=&quot;o&quot;&gt;===&amp;gt;&lt;/span&gt; Fetching rebar3_hex &lt;span class=&quot;o&quot;&gt;({&lt;/span&gt;pkg,&lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;rebar3_hex&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&amp;gt;&amp;gt;,&amp;lt;&amp;lt;&quot;4.1.0&quot;&amp;gt;&amp;gt;})
===&amp;gt; Downloaded package, caching at /home/hyun/.cache/rebar3/hex/default/packages/rebar3_hex-4.1.0.tar
===&amp;gt; Compiling rebar3_hex
===&amp;gt; Compiling _build/default/plugins/rebar3_hex/src/rebar3_hex_http.erl failed
_build/default/plugins/rebar3_hex/src/rebar3_hex_http.erl:14: can&apos;t find include lib &quot;public_key/include/OTP-PUB-KEY.hrl&quot;

===&amp;gt; Plugin rebar3_hex not available. It will not be used.

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/edgurgel/httpoison/issues/46&quot;&gt;이때는 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;erlang-dev&lt;/code&gt; 패키지를 추가로 설치해줘야 한다.&lt;/a&gt;&lt;/p&gt;

&lt;h4 id=&quot;다음-문제는-hex로-cowboy를-설치하고-컴파일-했을-때다&quot;&gt;다음 문제는 hex로 cowboy를 설치하고 컴파일 했을 때다.&lt;/h4&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;rebar3 compile
&lt;span class=&quot;o&quot;&gt;===&amp;gt;&lt;/span&gt; Verifying dependencies...
&lt;span class=&quot;o&quot;&gt;===&amp;gt;&lt;/span&gt; Fetching cowboy &lt;span class=&quot;o&quot;&gt;({&lt;/span&gt;pkg,&lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;cowboy&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;&quot;&amp;gt;&amp;gt;,&amp;lt;&amp;lt;&quot;2.2.2&quot;&amp;gt;&amp;gt;})
===&amp;gt; Downloaded package, caching at /home/hyun/.cache/rebar3/hex/default/packages/cowboy-2.2.2.tar
===&amp;gt; Fetching meck ({pkg,&amp;lt;&amp;lt;&quot;meck&quot;&amp;gt;&amp;gt;,&amp;lt;&amp;lt;&quot;0.8.9&quot;&amp;gt;&amp;gt;})
===&amp;gt; Downloaded package, caching at /home/hyun/.cache/rebar3/hex/default/packages/meck-0.8.9.tar
===&amp;gt; Fetching cowlib ({pkg,&amp;lt;&amp;lt;&quot;cowlib&quot;&amp;gt;&amp;gt;,&amp;lt;&amp;lt;&quot;2.1.0&quot;&amp;gt;&amp;gt;})
===&amp;gt; Downloaded package, caching at /home/hyun/.cache/rebar3/hex/default/packages/cowlib-2.1.0.tar
===&amp;gt; Fetching ranch ({pkg,&amp;lt;&amp;lt;&quot;ranch&quot;&amp;gt;&amp;gt;,&amp;lt;&amp;lt;&quot;1.4.0&quot;&amp;gt;&amp;gt;})
===&amp;gt; Downloaded package, caching at /home/hyun/.cache/rebar3/hex/default/packages/ranch-1.4.0.tar
===&amp;gt; Compiling cowlib
===&amp;gt; Compiling _build/default/lib/cowlib/src/cow_sse.erl failed
_build/default/lib/cowlib/src/cow_sse.erl:32: syntax error before: &apos;:=&apos;

_build/default/lib/cowlib/src/cow_sse.erl:44: type event() undefined
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;hex로 cowboy 최신 버전인 2.2.2를 설치했는데, 2.0 부터는 Erlang/OTP 19 이상만 지원한다.
그래서, 시스템에 설치된 얼랭을 업그레이드 해야 한다.
&lt;a href=&quot;https://www.erlang-solutions.com/resources/download.html&quot;&gt;Erlang Solutions 저장소를 시스템에 추가해서 설치하면 쉽게 할 수 있다.&lt;/a&gt;&lt;/p&gt;

&lt;h4 id=&quot;마지막으로-애플리케이션을-시작할-때-cowboy도-실행되도록-해야-한다&quot;&gt;마지막으로, 애플리케이션을 시작할 때 cowboy도 실행되도록 해야 한다.&lt;/h4&gt;
&lt;p&gt;자동으로 추가되지 않기 때문에, 런타임 에러가 발생한다.
프로젝트명.app.src 파일에 cowboy를 추가한다.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;application, cowboy_rebar_travis,
 &lt;span class=&quot;o&quot;&gt;[{&lt;/span&gt;description, &lt;span class=&quot;s2&quot;&gt;&quot;An OTP application&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,
  &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;vsn, &lt;span class=&quot;s2&quot;&gt;&quot;0.1.0&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,
  &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;registered, &lt;span class=&quot;o&quot;&gt;[]}&lt;/span&gt;,
  &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;mod, &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt; cowboy_rebar_travis_app, &lt;span class=&quot;o&quot;&gt;[]}}&lt;/span&gt;,
  &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;applications,
   &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;kernel,
    stdlib,
    cowboy
   &lt;span class=&quot;o&quot;&gt;]}&lt;/span&gt;,
  &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;env&lt;/span&gt;,[]&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;,
  &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;modules, &lt;span class=&quot;o&quot;&gt;[]}&lt;/span&gt;,

  &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;maintainers, &lt;span class=&quot;o&quot;&gt;[]}&lt;/span&gt;,
  &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;licenses, &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;Apache 2.0&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]}&lt;/span&gt;,
  &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;links, &lt;span class=&quot;o&quot;&gt;[]}&lt;/span&gt;
 &lt;span class=&quot;o&quot;&gt;]}&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;.&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Travis-CI 실행은 별다를 게 없다.
유닛테스트 들어가고, 빌드 옵션 등도 포함되면 얘기가 다르겠지만,
지금 예제 정도는 아래 몇 줄로 끝이다.&lt;/p&gt;
&lt;div class=&quot;language-yml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;na&quot;&gt;language&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;erlang&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;otp_release&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;20.0&lt;/span&gt;
  &lt;span class=&quot;pi&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;19.2&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/surinkim/cowboy_rebar_travis&quot;&gt;완성된 예제는 여기서 확인.&lt;/a&gt;&lt;/p&gt;

</description>
				<pubDate>Fri, 30 Mar 2018 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2018/03/30/Cowboy_Rebar3_Travisci/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2018/03/30/Cowboy_Rebar3_Travisci/</guid>
			</item>
		
			<item>
				<title>(번역서)모던 C++로 배우는 함수형 프로그래밍</title>
				        
        <description>&lt;p&gt;&lt;img src=&quot;/img/book_c++_fp/cover.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;--책소개&quot;&gt;- 책소개&lt;/h4&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;모던 C++의 새로운 기능과 함수형 프로그래밍을 다룬다. 기능이나 개념별로 예제 코드를 작성하고 실행하며 공부할 수 있도록 구성했다. 기본 문법은 자세히 설명하지 않으므로 C++ 사용 경험이 있는 독자를 대상으로 한다. C++ 11 이후의 새로운 기능을 요약해서 배우고, 함수형 프로그래밍에 적용해 보는 과정을 흥미 있게 따라갈 수 있다.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4 id=&quot;--에이콘출판사-2018년-3월-30일&quot;&gt;- 에이콘출판사, 2018년 3월 30일&lt;/h4&gt;

&lt;h4 id=&quot;--예제-코드-github-&quot;&gt;- &lt;a href=&quot;https://github.com/surinkim/learning_cpp_functional_programming_kor&quot; target=&quot;_blank&quot;&gt;예제 코드 github &lt;/a&gt;&lt;/h4&gt;

&lt;h4 id=&quot;---구매--예스24--알라딘&quot;&gt;-  구매 : &lt;a href=&quot;http://www.yes24.com/24/goods/59384637&quot; target=&quot;_blank&quot;&gt;예스24 &lt;/a&gt;, &lt;a href=&quot;http://www.aladin.co.kr/shop/wproduct.aspx?ItemId=138158223&quot; target=&quot;_blank&quot;&gt;알라딘&lt;/a&gt;&lt;/h4&gt;

&lt;h4 id=&quot;--책-내용-중-잘못됐거나-궁금한-점-있으면-아래에-남겨주세요-nnhopehotmail로-보내주셔도-됩니다&quot;&gt;- 책 내용 중, 잘못됐거나 궁금한 점 있으면 아래에 남겨주세요. nnhope@hotmail로 보내주셔도 됩니다.&lt;/h4&gt;

</description>
				<pubDate>Fri, 30 Mar 2018 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/books/2018/03/30/book_998_cpp_functional/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/books/2018/03/30/book_998_cpp_functional/</guid>
			</item>
		
			<item>
				<title>RabbitMQ 기초</title>
				        
        <description>&lt;p&gt;RabbitMQ는 메시지 브로커의 한 종류로, 얼랭으로 만들었다.&lt;br /&gt;
또 다른 메시지 브로커인 Kafka와 자주 비교되는데, &lt;strong&gt;AMQP 등의 표준 프로토콜 지원, ZooKeeper 같은 코디네이터가 필요없다는 점, 메시지 priority 설정, 웹 콘솔 지원&lt;/strong&gt; 등이 장점으로 꼽힌다.&lt;/p&gt;

&lt;p&gt;여기서는 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rabbitmqadmin&lt;/code&gt; 명령으로 콘솔에서 메시지를 보내고(publish) 가져오고(consume), 동일한 작업을 파이썬 코드로도 실행해 본다.&lt;/p&gt;

&lt;h3 id=&quot;exchange-binding-queue&quot;&gt;Exchange, Binding, Queue&lt;/h3&gt;

&lt;p&gt;먼저, RabbitMQ의 핵심 구성 요소인 Exchange, Binding, Queue에 대해 짚고 넘어가자. 아래 그림은 RabbitMQ 호스팅 서비스인 CloudAMQP에서 가져왔다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/2018_02_04/image0.png&quot; alt=&quot;image1.jpg&quot; width=&quot;380px&quot; height=&quot;417px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;프로듀서 ①이 RabbitMQ의 익스체인지에 메시지를 전송한다.&lt;br /&gt;
RabbitMQ 메시지 처리 모델의 중요 원칙은 프로듀서가 어떤 메시지도 큐에 직접 보낼 수 없도록 하는 것이다. 프로듀서는 오직 익스체인지에만 메시지를 보낼 수 있다.&lt;/p&gt;

&lt;p&gt;익스체인지 ②가 수신한 메시지는 바인딩 ③을 통해 큐 ④로 들어간다.&lt;br /&gt;
바인딩은 익스체인지와 큐의 관계를 정의한 것으로 라우팅과 같은 개념이다.&lt;br /&gt;
큐는 메시지가 저장되는 버퍼다.&lt;/p&gt;

&lt;p&gt;마지막으로, 컨슈머 ⑤가 메시지를 가져와 처리한다.&lt;/p&gt;

&lt;h3 id=&quot;rabbitmqadmin&quot;&gt;rabbitmqadmin&lt;/h3&gt;

&lt;p&gt;RabbitMQ를 설치한 후에, 추가로 해야 될 작업은 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rabbitmqadmin&lt;/code&gt; 명령행 설치다.&lt;br /&gt;
웹 콘솔을 통해 설치하면 되는데 찾기가 힘들 뿐, 설치는 간단하므로 아래 링크를 참고하자.&lt;/p&gt;

&lt;blockquote&gt;

  &lt;p&gt;&lt;a href=&quot;https://nixmash.com/post/installing-rabbitmqadmin-command-line-tool-in-ubuntu&quot;&gt;Installing the RabbitMQAdmin Command Line Tool in Linux&lt;/a&gt;&lt;/p&gt;

&lt;/blockquote&gt;

&lt;p&gt;예제로 사용할 메시징 처리 흐름은 아래와 같다.&lt;br /&gt;
news라는 익스체인지에 메시지를 보내면, 메시지 id prefix를 기준으로 하는 바인딩을 통해, tech와 book 큐로 각각 전달된다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/2018_02_04/image1.png&quot; alt=&quot;image1.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;익스체인지를 생성한다.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;rabbitmqadmin &lt;span class=&quot;nb&quot;&gt;declare &lt;/span&gt;exchange &lt;span class=&quot;nv&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;news &lt;span class=&quot;nb&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;topic
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;큐를 생성한다.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;rabbitmqadmin &lt;span class=&quot;nb&quot;&gt;declare &lt;/span&gt;queue &lt;span class=&quot;nv&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;tech
&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;rabbitmqadmin &lt;span class=&quot;nb&quot;&gt;declare &lt;/span&gt;queue &lt;span class=&quot;nv&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;book
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;생성한 큐 목록을 확인한다.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;hyun@hyun-VirtualBox:~&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;rabbitmqadmin list queues
+------+----------+
| name | messages |
+------+----------+
| book | 0        |
| tech | 0        |
+------+----------+
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;바인딩을 생성한다.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;rabbitmqadmin &lt;span class=&quot;nb&quot;&gt;declare &lt;/span&gt;binding &lt;span class=&quot;nb&quot;&gt;source&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;news&quot;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;destination_type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;queue&quot;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;destination&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;tech&quot;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;routing_key&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;tech.*&quot;&lt;/span&gt;

&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;rabbitmqadmin &lt;span class=&quot;nb&quot;&gt;declare &lt;/span&gt;binding &lt;span class=&quot;nb&quot;&gt;source&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;news&quot;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;destination_type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;queue&quot;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;destination&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;book&quot;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;routing_key&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;book.*&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;바인딩 생성 후, 목록을 확인하자.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;hyun@hyun-VirtualBox:~&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;rabbitmqadmin list bindings
+--------+-------------+-------------+
| &lt;span class=&quot;nb&quot;&gt;source&lt;/span&gt; | destination | routing_key |
+--------+-------------+-------------+
| news   | book        | book.&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;      |
| news   | tech        | tech.&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;      |
+--------+-------------+-------------+

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;이제, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;news&lt;/code&gt; 익스체인지에 전송된 메시지 중, 메시지 id가 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;book.*&lt;/code&gt;에 매칭되면 book 큐에 저장되고, 메시지 id가 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tech.*&lt;/code&gt;에 매칭되면 tech 큐에 저장된다.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;콘솔에서 메시지를 전송해 보자.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;hyun@hyun-VirtualBox:~&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;rabbitmqadmin publish &lt;span class=&quot;nv&quot;&gt;exchange&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;news &lt;span class=&quot;nv&quot;&gt;routing_key&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;tech.12&quot;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;payload&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;12번째 뉴스 - 러스트&quot;&lt;/span&gt;
Message published
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;news&lt;/code&gt;익스체인지에 메시지 id를 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tech.12&lt;/code&gt;로 설정해서 보냈으므로, tech 큐에 저장됐을 것이다. 확인해 보자.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;hyun@hyun-VirtualBox:~&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;rabbitmqadmin list queues
+------+----------+
| name | messages |
+------+----------+
| book | 0        |
| tech | 1        |
+------+----------+

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;이번에는 tech 큐에 저장된 메시지를 가져온다.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;hyun@hyun-VirtualBox:~&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;rabbitmqadmin get &lt;span class=&quot;nv&quot;&gt;queue&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;tech &lt;span class=&quot;nv&quot;&gt;requeue&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;끝의 requeue 옵션은 메시지를 큐에서 꺼내 온 다음, 다시 큐에 저장할 것인지를 지정하는 옵션이다.&lt;br /&gt;
&lt;strong&gt;디폴트 동작은 requeue=true&lt;/strong&gt;로, 메시지를 꺼내와도 삭제되지 않고, 큐에 메시지가 다시 저장된다.&lt;br /&gt;
여기서는 requeue=false로 가져왔으므로, 이 명령이 실행되면 큐에서 메시지가 사라져야 한다.
확인해 보자.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;hyun@hyun-VirtualBox:~&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;rabbitmqadmin list queues
+------+----------+
| name | messages |
+------+----------+
| book | 0        |
| tech | 0        |
+------+----------+

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;파이썬-스크립트&quot;&gt;파이썬 스크립트&lt;/h3&gt;
&lt;p&gt;이번에는 rabbitmqadmin 대신, 파이썬 코드로 메시지를 게시하고 가져와 본다.&lt;br /&gt;
파이썬에 pika를 설치해줘야 한다. pika는 RabbitMQ가 사용하는 AMQP 라이브러리다.&lt;/p&gt;

&lt;p&gt;먼저, tech 메시지를 수신하는 consumer.py 코드다.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c1&quot;&gt;# consumer.py
&lt;/span&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;pika&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;pika&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BlockingConnection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BasicProperties&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;on_message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;channel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;method_frame&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;header_frame&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;tech_id&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;method_frame&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;routing_key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;split&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;.&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)[&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;---새 메시지---&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;tech id : &apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tech_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;body : &apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;decode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;utf-8&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
    
    &lt;span class=&quot;n&quot;&gt;channel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;basic_ack&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;delivery_tag&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;method_frame&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;delivery_tag&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;print&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;tech 메시지 수신 대기 중...&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;connection&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;pika&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;BlockingConnection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;channel&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;connection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;channel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;channel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;basic_consume&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;on_message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;queue&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;tech&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;channel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;start_consuming&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;except&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;KeyboardInterrupt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;channel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;stop_consuming&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;connection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;close&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;로컬 rabbitmq에서 동기식 연결을 맺고 tech.* 메시지가 수신되면 가져온다. 
메시지를 가져 온 다음, ack를 보내서 큐에서 메시지가 제거되도록 한다.&lt;/p&gt;

&lt;p&gt;다음으로, 메시지를 보내는 publisher.py 코드다.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c1&quot;&gt;# publisher.py
&lt;/span&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;pika&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BlockingConnection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BasicProperties&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;topic&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;connection&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BlockingConnection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;try&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;channel&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;connection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;channel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;props&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;BasicProperties&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;content_type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;text/plain&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;delivery_mode&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;channel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;basic_publish&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;news&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;topic&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;props&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;finally&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;connection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;close&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;tech.17&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&apos;ejabberd 버전업&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;consumer.py를 실행시켜 두고, 다른 쉘에서 publisher.py를 실행했을 때 출력은 다음과 같다.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;work&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; hyun@hyun-VirtualBox:~/work/python&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;python consumer.py
tech 메시지 수신 대기 중...

&lt;span class=&quot;nt&quot;&gt;---&lt;/span&gt;새 메시지---
tech &lt;span class=&quot;nb&quot;&gt;id&lt;/span&gt; :  17
body :  ejabberd 버전업
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

</description>
				<pubDate>Sun, 04 Feb 2018 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2018/02/04/RabbitMQ_usage/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2018/02/04/RabbitMQ_usage/</guid>
			</item>
		
			<item>
				<title>파이썬 Tox</title>
				        
        <description>&lt;p&gt;Tox는 파이썬의 테스트 자동화, 표준화를 위한 도구다.  Tox를 사용하면,&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;다양한 파이썬 버전에서 패키지가 제대로 설치되는지 확인&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;선택한 테스트 툴과 설정을 사용해서 자동으로 테스트 실행&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;CI와 통합&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;이런 것들을 할 수 있다.&lt;/p&gt;

&lt;p&gt;여기서는 Tox에서 pytest 실행 방법을 정리한다.
pytest 확장인 pytest-cov, pytest-flake8도 사용해본다.&lt;/p&gt;

&lt;hr /&gt;

&lt;h3 id=&quot;hello_flaskpy&quot;&gt;hello_flask.py&lt;/h3&gt;
&lt;p&gt;먼저, virtualenv로 dev_tox 환경을 만들고, hello_flask.py 플라스크 소스를 추가했다.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c1&quot;&gt;# hello_flask.py
&lt;/span&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;flask&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Flask&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;jsonify&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;app&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Flask&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;__name__&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;


&lt;span class=&quot;o&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;route&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;/api&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;my_microservice&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;():&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;jsonify&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;Hello&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&apos;World!&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;})&lt;/span&gt;


&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;__name__&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&apos;__main__&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;run&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;/api 엔드포인트를 호출하면, json으로 Hello World를 반환하는 심플한 서버다.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;curl localhost:5000/api 
&lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;                         
  &lt;span class=&quot;s2&quot;&gt;&quot;Hello&quot;&lt;/span&gt;: &lt;span class=&quot;s2&quot;&gt;&quot;World!&quot;&lt;/span&gt;       
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;                         
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;test_hello_flaskpy&quot;&gt;test_hello_flask.py&lt;/h3&gt;
&lt;p&gt;이제, hello_flask를 테스트 하기 위한 모듈, test_hello_flask.py를 만든다.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c1&quot;&gt;# -*- coding: utf-8 -*-
# test_hello_flask.py
&lt;/span&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;unittest&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;json&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;sys&lt;/span&gt;
&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;hello_flask&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;app&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_app&lt;/span&gt;


&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;TestApp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;unittest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TestCase&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;test_help&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;

        &lt;span class=&quot;n&quot;&gt;app&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;_app&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;test_client&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;hello&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;app&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;/api&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;

        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sys&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;version_info&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)):&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;body&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;loads&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hello&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&apos;utf8&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;body&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;json&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;loads&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;hello&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;encode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;utf8&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;

        &lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;assertEqual&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;Hello&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&apos;World!&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;


&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;__name__&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&apos;__main__&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;unittest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;15 ~ 열여덟 라인은 2.X과 3.X 버전의 str() 함수 원형이 다르기 때문에 추가했다.
(아래에서 Tox로 테스트할 때, 2.7과 3.6 버전을 사용한다.)&lt;/p&gt;

&lt;p&gt;pytest로 테스트가 성공하는지 먼저 확인해 보자.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;dev_tox&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;pytest
&lt;span class=&quot;o&quot;&gt;=============================&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;test &lt;/span&gt;session starts &lt;span class=&quot;o&quot;&gt;=============================&lt;/span&gt;
platform win32 &lt;span class=&quot;nt&quot;&gt;--&lt;/span&gt; Python 3.6.3, pytest-3.3.2, py-1.5.2, pluggy-0.6.0
rootdir: D:&lt;span class=&quot;se&quot;&gt;\C&lt;/span&gt;ode&lt;span class=&quot;se&quot;&gt;\p&lt;/span&gt;ython_dev&lt;span class=&quot;se&quot;&gt;\d&lt;/span&gt;ev_tox&lt;span class=&quot;se&quot;&gt;\f&lt;/span&gt;lask, inifile:
plugins: flake8-0.9.1, cov-2.5.1
collected 1 item

test_functional_01.py &lt;span class=&quot;nb&quot;&gt;.&lt;/span&gt;                                                  &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;100%]

&lt;span class=&quot;o&quot;&gt;==========================&lt;/span&gt; 1 passed &lt;span class=&quot;k&quot;&gt;in &lt;/span&gt;0.22 seconds &lt;span class=&quot;o&quot;&gt;===========================&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;tox&quot;&gt;Tox&lt;/h3&gt;
&lt;p&gt;이제 Tox를 사용할 차례다. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pip install tox&lt;/code&gt;로 패키지를 설치하자.&lt;br /&gt;
Tox를 실행하려면, tox.ini와 setup.py가 필요하다. setup.py의 내용은, 여기서 중요하지 않으므로, 아래처럼 최소한으로 했다.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-python&quot; data-lang=&quot;python&quot;&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;kn&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;setuptools&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;setup&lt;/span&gt;


&lt;span class=&quot;n&quot;&gt;setup&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;hello_flask&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;0.1&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;tox.ini에는 테스트를 실행할 파이썬 버전, 의존성, 테스트 명령 등을 적어둔다.&lt;/p&gt;

&lt;div class=&quot;language-ini highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;[tox]&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;envlist&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;py27,py36&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;[testenv]&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;deps&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;flask&lt;/span&gt;
     &lt;span class=&quot;err&quot;&gt;pytest&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;commands&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;pytest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;위와 같이, envlist에 파이썬 버전, deps에 의존성, commands에 테스트 명령을 적어준다. envlist에 기술한 파이썬 버전 2.7과 3.6은 시스템에 미리 설치해둬야 한다.&lt;/p&gt;

&lt;p&gt;작성이 완료됐으면 tox 명령으로 실행한다.&lt;/p&gt;

&lt;div class=&quot;language-console highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;gp&quot;&gt;(dev_tox) $&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;tox
&lt;span class=&quot;go&quot;&gt;GLOB sdist-make: D:\Code\python_dev\dev_tox\flask\setup.py
py27 recreate: D:\Code\python_dev\dev_tox\flask\.tox\py27
py27 installdeps: flask, pytest
py27 inst: D:\Code\python_dev\dev_tox\flask\.tox\dist\hello_flask-0.1.zip
py27 installed: attrs==17.4.0,click==6.7,colorama==0.3.9,Flask==0.12.2,funcsigs==1.0.2,hello-flask==0.1,
itsdangerous==0.24,Jinja2==2.10,MarkupSafe==1.0,pluggy==0.6.0,py==1.5.2,pytest==3.3.2,six==1.11.0,Werkze
ug==0.14.1
py27 runtests: PYTHONHASHSEED=&apos;435&apos;
py27 runtests: commands[0] | pytest
============================= test session starts =============================
platform win32 -- Python 2.7.14, pytest-3.3.2, py-1.5.2, pluggy-0.6.0
rootdir: D:\Code\python_dev\dev_tox\flask, inifile:
collected 1 item

test_functional_01.py .                                                  [100%]

========================== 1 passed in 0.16 seconds ===========================
py36 recreate: D:\Code\python_dev\dev_tox\flask\.tox\py36
py36 installdeps: flask, pytest
py36 inst: D:\Code\python_dev\dev_tox\flask\.tox\dist\hello_flask-0.1.zip
py36 installed: attrs==17.4.0,click==6.7,colorama==0.3.9,Flask==0.12.2,hello-flask==0.1,itsdangerous==0.
24,Jinja2==2.10,MarkupSafe==1.0,pluggy==0.6.0,py==1.5.2,pytest==3.3.2,six==1.11.0,Werkzeug==0.14.1
py36 runtests: PYTHONHASHSEED=&apos;435&apos;
py36 runtests: commands[0] | pytest
============================= test session starts =============================
platform win32 -- Python 3.6.3, pytest-3.3.2, py-1.5.2, pluggy-0.6.0
rootdir: D:\Code\python_dev\dev_tox\flask, inifile:
collected 1 item

test_functional_01.py .                                                  [100%]

========================== 1 passed in 0.24 seconds ===========================
___________________________________ summary ___________________________________
  py27: commands succeeded
  py36: commands succeeded
  congratulations :)

D:\Code\python_dev\dev_tox\flask
&lt;/span&gt;&lt;span class=&quot;gp&quot;&gt;(dev_tox) $&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;결과와 같이, 각 파이썬 버전 별 환경에 의존성을 설치하고 배포 파일을 생성한 다음, 테스트를 실행해준다.&lt;/p&gt;

&lt;h3 id=&quot;pytest-cov-pytest-flake8&quot;&gt;pytest-cov, pytest-flake8&lt;/h3&gt;
&lt;p&gt;이번에는 테스트에 pytest-cov, pytest-flake8도 추가해 보자.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;pytest-cov&lt;/strong&gt;: pytest의 coverage 플러그인. 코드 커버리지 검사.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;pytest-flake8&lt;/strong&gt;: pytest의 flake8 플러그인. 컨벤션이 PEP8을 준수하는지 검사.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;tox.ini의 의존성과 명령에 해당 도구를 추가한다.&lt;/p&gt;
&lt;div class=&quot;language-ini highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nn&quot;&gt;[tox]&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;envlist&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;py27,py36&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;[testenv]&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;deps&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;flask&lt;/span&gt;
    &lt;span class=&quot;err&quot;&gt;pytest&lt;/span&gt;
    &lt;span class=&quot;err&quot;&gt;pytest-cov&lt;/span&gt;
    &lt;span class=&quot;err&quot;&gt;pytest-flake8&lt;/span&gt;
&lt;span class=&quot;py&quot;&gt;commands&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;pytest -v --cov --flake8&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;커버리지 측정과 컨벤션 검사가 추가된 테스트 결과를 볼 수 있다.&lt;/p&gt;

&lt;div class=&quot;language-console highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;gp&quot;&gt;(dev_tox) $&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;tox
&lt;span class=&quot;c&quot;&gt;...
&lt;/span&gt;&lt;span class=&quot;go&quot;&gt;hello_flask.py SKIPPED                                                   [ 25%]
setup.py SKIPPED                                                         [ 50%]
test_hello_flask.py PASSED                                               [ 75%]
test_hello_flask.py::TestApp::test_help PASSED                           [100%]

---------- coverage: platform win32, python 2.7.14-final-0 -----------
Name                  Stmts   Miss  Cover
-----------------------------------------
hello_flask.py            6      1    83%
test_hello_flask.py      15      3    80%
-----------------------------------------
TOTAL                    21      4    81%


===================== 2 passed, 2 skipped in 0.32 seconds =====================
&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;...
&lt;/span&gt;&lt;span class=&quot;go&quot;&gt;
hello_flask.py SKIPPED                                                   [ 25%]
setup.py SKIPPED                                                         [ 50%]
test_hello_flask.py SKIPPED                                              [ 75%]
test_hello_flask.py::TestApp::test_help PASSED                           [100%]

----------- coverage: platform win32, python 3.6.3-final-0 -----------
Name                  Stmts   Miss  Cover
-----------------------------------------
hello_flask.py            6      1    83%
test_hello_flask.py      15      2    87%
-----------------------------------------
TOTAL                    21      3    86%


===================== 1 passed, 3 skipped in 0.33 seconds =====================
___________________________________ summary ___________________________________
  py27: commands succeeded
  py36: commands succeeded
  congratulations :)

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;참고&lt;/strong&gt;&lt;br /&gt;
pytest-flake8은 디폴트 로그 레벨이 DEBUG라서 warning 하나만 발생해도 어마무시한 로그가 출력된다. 뭔가 이상하다 싶으면, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;flake8&lt;/code&gt; 명령만 실행해서 warning을 먼저 해결한 다음,pytest-flake8을 실행하는게 좋다. &lt;a href=&quot;https://github.com/tholo/pytest-flake8/pull/43/files&quot;&gt;디폴트 로그 레벨을 WARN으로 설정한 PR&lt;/a&gt;이 5일전에 올라왔으니 조만간 해결되지 싶다.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
				<pubDate>Thu, 18 Jan 2018 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2018/01/18/python_tox/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2018/01/18/python_tox/</guid>
			</item>
		
			<item>
				<title>(번역서)크로스 플랫폼 개발을 위한 C# 7과 닷넷 코어 2.0</title>
				        
        <description>&lt;p&gt;&lt;img src=&quot;/img/book_c7_netcore/cover.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h4 id=&quot;--책소개&quot;&gt;- 책소개&lt;/h4&gt;
&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;C# 7의 새로운 기능과 닷넷 코어의 전반적인 내용을 다룬다. 설명을 최소한으로 하고 예제를 따라 해보면서 빠르게 익힐 수 있도록 구성돼 있다. C#의 기본 문법부터 고급 기능, 닷넷 코어를 활용한 콘솔, 데이터베이스, 웹 프로그래밍까지의 과정을 비주얼 스튜디오 2017, 비주얼 스튜디오 코드를 모두 사용해가면서 배운다. 닷넷 코어와 C#을 처음 접하는 개발자를 비롯해, 닷넷 프레임워크에는 익숙하지만 닷넷 코어에 대해 더 알고 싶은 개발자들이 짧은 시간에 전체 구성을 이해하고 활용할 수 있게 도와 준다.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4 id=&quot;--에이콘출판사-2018년-1월-18일&quot;&gt;- 에이콘출판사, 2018년 1월 18일&lt;/h4&gt;

&lt;h4 id=&quot;--예제-코드-github-&quot;&gt;- &lt;a href=&quot;https://github.com/surinkim/cs7dotnetcore_kor&quot; target=&quot;_blank&quot;&gt;예제 코드 github &lt;/a&gt;&lt;/h4&gt;

&lt;h4 id=&quot;---구매--예스24--알라딘&quot;&gt;-  구매 : &lt;a href=&quot;http://www.yes24.com/24/goods/57905587&quot; target=&quot;_blank&quot;&gt;예스24 &lt;/a&gt;, &lt;a href=&quot;http://www.aladin.co.kr/shop/wproduct.aspx?ItemId=128563714&quot; target=&quot;_blank&quot;&gt;알라딘&lt;/a&gt;&lt;/h4&gt;

&lt;h4 id=&quot;--책-내용-중-잘못됐거나-궁금한-점-있으면-아래에-남겨주세요-nnhopehotmail로-보내주셔도-됩니다&quot;&gt;- 책 내용 중, 잘못됐거나 궁금한 점 있으면 아래에 남겨주세요. nnhope@hotmail로 보내주셔도 됩니다.&lt;/h4&gt;

</description>
				<pubDate>Thu, 18 Jan 2018 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/books/2018/01/18/book_999_c7_netcore/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/books/2018/01/18/book_999_c7_netcore/</guid>
			</item>
		
			<item>
				<title>플라스크 abort 변경 내용</title>
				        
        <description>&lt;p&gt;Flask 0.12 이전에는 flask.abort.mapping 딕셔너리를 사용할 수 있었다.&lt;/p&gt;

&lt;p&gt;사실 &lt;strong&gt;abort&lt;/strong&gt;는 werkzeug의 Aborter 클래스 인스턴스다. 그런데, werkzeug 0.12에 abort()함수가 추가되면서, Aborter 클래스의 인스턴스 이름이 &lt;strong&gt;_aborter&lt;/strong&gt;가 돼버렸다..(&lt;a href=&quot;https://github.com/pallets/werkzeug/commit/9ab649fdc225037162a9d29be08648249c4588ab#diff-43a63db82587e91732eda181306d76c7&quot; target=&quot;_blank&quot;&gt;compare 링크 &lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;또, 새로 추가된 abort() 함수는 고정 인수로 status를 사용한다.&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;    &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;abort&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;status&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;args&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;**&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;kwargs&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;):&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;그래서, 아래처럼 사용한 기존 코드도 수정이 필요한데, 이미 문서에서 status를 사용하는 것으로 명시한 상황이라 어쩔 수 없었던 것 같다.(&lt;a href=&quot;https://github.com/pallets/werkzeug/pull/1003/files#diff-43a63db82587e91732eda181306d76c7R668&quot; target=&quot;_blank&quot;&gt;merge 링크 &lt;/a&gt;)&lt;/p&gt;

&lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;abort&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;code&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;400&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;description&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Invalid destination name&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;어쨌든, description을 얻거나 custom 핸들러 등을 등록하기 위해 &lt;strong&gt;mapping&lt;/strong&gt; 딕셔너리가 필요하다면 이제 &lt;strong&gt;_aborter&lt;/strong&gt;를 써야 한다.&lt;/p&gt;

&lt;p&gt;다음은 /api 엔드 포인트를 호출하면 고의로 TypeError를 발생시키고, 커스텀 핸들러에서 500 에러를 json 형식으로 반환한다.&lt;/p&gt;

&lt;script src=&quot;https://gist.github.com/surinkim/b9ffb01a395405ea601cc927085d7e4c.js&quot;&gt;&lt;/script&gt;

</description>
				<pubDate>Sat, 13 Jan 2018 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2018/01/13/flask_abort/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2018/01/13/flask_abort/</guid>
			</item>
		
			<item>
				<title>윈도우에 MinGW 64bit/Code::Blocks 설치</title>
				        
        <description>&lt;h2 id=&quot;mingw-64bit-설치&quot;&gt;MinGW 64bit 설치&lt;/h2&gt;

&lt;p&gt;1.&lt;a href=&quot;https://sourceforge.net/projects/mingw-w64/?source=typ_redirect&quot;&gt;MinGW 64bit 셋업 파일&lt;/a&gt;을 다운로드하고 설치를 시작합니다.&lt;/p&gt;

&lt;p&gt;2.아래 그림처럼 Architecture 항목을 &lt;strong&gt;x86_64&lt;/strong&gt;로 설정합니다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://surinkim.github.io/img/2017_10_16/MinGW_1.jpg&quot; alt=&quot;MinGW64_1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;3.나머지는 그대로 두고 Next를 눌러 설치를 완료합니다.&lt;/p&gt;

&lt;h2 id=&quot;codeblocks-설치&quot;&gt;Code::Blocks 설치&lt;/h2&gt;

&lt;p&gt;1.&lt;a href=&quot;http://www.codeblocks.org/downloads/26&quot;&gt;Code::Blocks 다운로드 페이지&lt;/a&gt;에서 셋업 파일을 다운로드 합니다.&lt;/p&gt;

&lt;p&gt;–  위에서 MinGW 64bit 버전을 설치했으므로 Code::Blocks만 설치하는 &lt;strong&gt;codeblocks-16.01-setup.exe&lt;/strong&gt;를 다운로드 합니다.&lt;/p&gt;

&lt;p&gt;–  이 글을 쓰는 현재 Code::Blocks의 최신 버전은 16.01입니다.&lt;/p&gt;

&lt;p&gt;2.기본 설정을 그대로 두고 설치를 완료합니다.&lt;/p&gt;

&lt;p&gt;3.설치가 완료되면  Code::Blocks를 실행하고 Settings -&amp;gt; Compiler -&amp;gt; Toolchain executables를 차례로 클릭합니다.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://surinkim.github.io/img/2017_10_16/codeblocks_1.jpg&quot; alt=&quot;CodeBlocks 1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://surinkim.github.io/img/2017_10_16/codeblocks_2.jpg&quot; alt=&quot;CodeBlocks 2&quot; /&gt;&lt;/p&gt;

&lt;p&gt;4.아래 그림처럼 컴파일러를 설정합니다. 컴파일러 설치 디렉토리 경로에 bin 폴더가 들어가지 않도록 주의하세요.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;ex)C:\Program Files\mingw-w64\x86_64-7.1.0-posix-seh-rt_v5-rev2\mingw64\
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src=&quot;https://surinkim.github.io/img/2017_10_16/codeblocks_3.jpg&quot; alt=&quot;CodeBlocks 3&quot; /&gt;&lt;/p&gt;
</description>
				<pubDate>Mon, 16 Oct 2017 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2017/10/16/how_win_codeblocks_install/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2017/10/16/how_win_codeblocks_install/</guid>
			</item>
		
			<item>
				<title>도커 요약</title>
				        
        <description>&lt;h2 id=&quot;docker-basic&quot;&gt;docker basic&lt;/h2&gt;

&lt;p&gt;docker search&lt;/p&gt;

&lt;p&gt;docker pull&lt;/p&gt;

&lt;p&gt;docker run&lt;/p&gt;

&lt;p&gt;https://asciinema.org/a/8541tbmjqi69fe6ssw8oqpr67&lt;/p&gt;

&lt;h2 id=&quot;machine--compose--swarm&quot;&gt;machine / compose / swarm&lt;/h2&gt;

&lt;p&gt;https://blog.codeship.com/docker-machine-compose-and-swarm-how-they-work-together/&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;docker machine&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;https://docs.docker.com/machine/overview/#/whats-the-difference-between-docker-engine-and-docker-machine&lt;/p&gt;

&lt;p&gt;https://docs.docker.com/machine/drivers/&lt;/p&gt;

&lt;p&gt;https://docs.docker.com/machine/concepts/&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;docker compose&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;swarm&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finally, let’s look at the most interesting tool in the current Docker Toolbox, Docker Swarm. What you’ve done so far is work with one container host and run a container or two, which is great for testing or local development. With Docker Swarm we’re now going to turn that small test environment into a larger setup of clustered container hosts that can be used to scale your operations into something even more useful.&lt;/p&gt;

&lt;p&gt;https://platform9.com/blog/compare-kubernetes-vs-docker-swarm/&lt;/p&gt;

&lt;p&gt;http://www.slideshare.net/GuillermoLucero/docker-machine-docker-swarm&lt;/p&gt;

&lt;p&gt;https://blog.abevoelker.com/why-i-dont-use-docker-much-anymore/&lt;/p&gt;

&lt;h2 id=&quot;volume&quot;&gt;volume&lt;/h2&gt;

&lt;p&gt;ref 1 : http://container-solutions.com/understanding-volumes-docker/&lt;/p&gt;

&lt;p&gt;ref 2 : http://pepa.holla.cz/wp-content/uploads/2016/10/Docker-in-Action.pdf&lt;/p&gt;

&lt;h3 id=&quot;-union-file-system&quot;&gt;* union file system&lt;/h3&gt;
&lt;p&gt;&lt;img src=&quot;/img/2017_03_30/docker1.png&quot; alt=&quot;image_layers-1-300x295.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docker images are stored as series of read-only layers. When we start a container, Docker takes the read-only image and adds a read-write layer on top. If the running container modifies an existing file, the file is copied out of the underlying read-only layer and into the top-most read-write layer where the changes are applied.&lt;/strong&gt; The version in the read-write layer hides the underlying file, but does not destroy it — it still exists in the underlying layer. When a Docker container is deleted, relaunching the image will start a fresh container without any of the changes made in the previously running container — those changes are lost. &lt;strong&gt;Docker calls this combination of read-only layers with a read-write layer on top a Union File System.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/2017_03_30/docker2.jpg&quot; alt=&quot;04fig01_alt.jpg&quot; /&gt;&lt;/p&gt;

&lt;p&gt;In order to be able to save (persist) data and also to share data between containers, &lt;strong&gt;Docker came up with the concept of volumes. Quite simply, volumes are directories (or files) that are outside of the default Union File System&lt;/strong&gt; and exist as normal directories and files on the host filesystem.&lt;/p&gt;

&lt;h3 id=&quot;-volume-type&quot;&gt;* volume type&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/img/2017_03_30/docker3.jpg&quot; alt=&quot;04fig03_alt.jpg&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Docker-managed volume&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run &lt;span class=&quot;nt&quot;&gt;-it&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--name&lt;/span&gt; vol-test &lt;span class=&quot;nt&quot;&gt;-v&lt;/span&gt; /data centos /bin/bash

docker inspect &lt;span class=&quot;nt&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&quot;&lt;/span&gt; vol-test | jq &lt;span class=&quot;nb&quot;&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Bind mount volume&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker run &lt;span class=&quot;nt&quot;&gt;-it&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--name&lt;/span&gt; vol-test &lt;span class=&quot;nt&quot;&gt;-v&lt;/span&gt; /src/sample:/data centos /bin/bash
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Mounting a host directory can be useful for testing. For example, you can mount source code inside a container. Then, change the source code and see its effect on the application in real time.&lt;/p&gt;

&lt;h3 id=&quot;-sharing-volume&quot;&gt;* Sharing Volume&lt;/h3&gt;

&lt;p&gt;https://docs.docker.com/compose/wordpress/&lt;/p&gt;

&lt;p&gt;https://docs.docker.com/compose/compose-file/#volume-configuration-reference&lt;/p&gt;

&lt;h2 id=&quot;docker-registry&quot;&gt;Docker registry&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;docker image 저장 서버 : 서버에 저장하거나 s3에 저장&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;docker registry도 하나의 docker image이고 docker hub에 공개되어 있음.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker tag&lt;/code&gt; 명령으로 태그 먼저 생성 후, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;docker push&lt;/code&gt;로 registry 서버에 업로드.&lt;/p&gt;
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;docker tag hello:0.1 localhost:5000/hello:0.1
docker push localhost:5000/hello:0.1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/img/2017_03_30/docker4.png&quot; alt=&quot;docker-stages.png&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;docker-usecase&quot;&gt;Docker usecase&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;image included source = docker managed volume&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;#!Dockerfile

# Base this docker container off the official golang docker image.
# Docker containers inherit everything from their base.
FROM golang:1.6.2

# Create a directory inside the container to store all our application and then make it the working directory.
RUN mkdir -p /src/
RUN cd /go/src/ &amp;amp;&amp;amp; git clone https://github.com/surinkim/gosample.git
WORKDIR /go/src/gosample

# Copy the example-app directory (where the Dockerfile lives) into the container.
#COPY . /go/src/example-app

# Download and install any required third party dependencies into the container.
RUN go get github.com/codegangsta/gin
RUN go-wrapper download
RUN go-wrapper install


# Set the PORT environment variable inside the container
ENV PORT 8080

# Expose port 8080 to the host so we can access our application
EXPOSE 3000

# Now tell Docker what command to run when the container starts
CMD gin run
#CMD /bin/bash

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;image excluded source = host bind volume&lt;/li&gt;
&lt;/ul&gt;
</description>
				<pubDate>Thu, 30 Mar 2017 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2017/03/30/docker_summary/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2017/03/30/docker_summary/</guid>
			</item>
		
			<item>
				<title>ELK 요약</title>
				        
        <description>&lt;h1 id=&quot;1-elk-summary&quot;&gt;1. ELK summary&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;What&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/img/2017_03_01/ELK1.png&quot; alt=&quot;Will-Migrating-to-the-Cloud-Save-Money-5.png&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;The ELK Stack is “made up for it”, ie specialized. Our role becomes customize: &lt;strong&gt;Collect the data in the best way&lt;/strong&gt;, &lt;strong&gt;automate demand&lt;/strong&gt; (or do batch collection) and &lt;strong&gt;creating good reports&lt;/strong&gt; for presentation of results or evidence to meet our need.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;/img/2017_03_01/ELK2.png&quot; alt=&quot;General-ELK-Stack.png&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;2-logstash&quot;&gt;2. Logstash&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;/img/2017_03_01/ELK3.png&quot; alt=&quot;스크린샷_2015-09-26_오후_9.31.47.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;https://www.elastic.co/kr/products/logstash&lt;/p&gt;

&lt;h2 id=&quot;logstash-democonsole-inputoutput-grok-filter&quot;&gt;logstash demo(console input/output, grok filter)&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;기본 예제&lt;/li&gt;
&lt;/ul&gt;

&lt;pre&gt;&lt;code class=&quot;language-logstash&quot;&gt;## 아래 콘솔 입력을 필터링해서 콘솔로 출력할 때의 예제
## 2016-12-19 00:00:05.908 [error] &amp;lt;127.0.0.1&amp;gt; sample data

input {
  
    stdin {}

}

filter {

    grok {
        match =&amp;gt; { &quot;message&quot; =&amp;gt; &quot;%{TIMESTAMP_ISO8601:time} \[%{LOGLEVEL:level}\] \&amp;lt;%{IP:ip}\&amp;gt; %{GREEDYDATA:contents}&quot; }
    }
}

output {

    stdout { codec =&amp;gt; rubydebug }

}

&lt;/code&gt;&lt;/pre&gt;

&lt;ul&gt;
  &lt;li&gt;다른 예제&lt;/li&gt;
&lt;/ul&gt;

&lt;script src=&quot;https://gist.github.com/surinkim/afea0d01e7583a5229c45bb73d62e163.js&quot;&gt;&lt;/script&gt;

&lt;ul&gt;
  &lt;li&gt;Demo : https://asciinema.org/a/4ubbukjn4x5qpu44t7zhg1s7j&lt;/li&gt;
  &lt;li&gt;Grok Debugger : https://grokdebug.herokuapp.com/&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;3-beats&quot;&gt;3. Beats&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;https://github.com/elastic/beats&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;a href=&quot;https://www.elastic.co/guide/en/beats/filebeat/1.1/diff-logstash-beats.html&quot;&gt;What is the difference between Logstash and Beats?&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Demo (FileBeat, HttpBeat)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;4-elasticsearch&quot;&gt;4. Elasticsearch&lt;/h1&gt;
&lt;p&gt;https://www.elastic.co/kr/products/elasticsearch&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;SQL plugin&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;https://github.com/NLPchina/elasticsearch-sql&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;shard &amp;amp; replica&lt;/p&gt;

    &lt;p&gt;http://guruble.com/?p=85&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;5-kibana&quot;&gt;5. Kibana&lt;/h1&gt;
&lt;p&gt;https://www.elastic.co/kr/products/kibana&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Demo : http://demo.elastic.co/beats/app/kibana&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;6-demo&quot;&gt;6. Demo&lt;/h1&gt;
</description>
				<pubDate>Wed, 01 Mar 2017 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2017/03/01/ELK_summary/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2017/03/01/ELK_summary/</guid>
			</item>
		
			<item>
				<title>github에서 repository fork후, 업데이트</title>
				        
        <description>&lt;p&gt;fork 저장소가 아닌 원래의 프로젝트 저장소를 upstream으로 등록.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git remote add &lt;span class=&quot;nt&quot;&gt;--track&lt;/span&gt; master upstream git://&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;git_repository_url&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;원래의 프로젝트 저장소로부터 최신 내용을 받음.&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git fetch upstream
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;master 브랜치&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git checkout master
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Rebase&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git rebase upstream/master
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;fork 저장소에 push&lt;/p&gt;
&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git push origin master
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

</description>
				<pubDate>Fri, 22 Jul 2016 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2016/07/22/update_fork/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2016/07/22/update_fork/</guid>
			</item>
		
			<item>
				<title>QT 5.5 static source build</title>
				        
        <description>&lt;h2 id=&quot;qt-55-소스-빌드-옵션&quot;&gt;QT 5.5 소스 빌드 옵션&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;default OpenGL
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;configure &lt;span class=&quot;nt&quot;&gt;-release&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-static&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtxmlpatterns &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtdeclarative &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtquickcontrols &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtmultimedia &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtactiveqt &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtlocation &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtsensors &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtconnectivity &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtwebkit &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtwebkit-examples &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtimageformats &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtgraphicaleffects &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtscript &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtquick1 &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtserialport &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtenginio &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtwebsockets &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtwebchannel &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtwebengine &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtdoc &lt;span class=&quot;nt&quot;&gt;-qt-sql-sqlite&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-qt-zlib&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-qt-libpng&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-qt-libjpeg&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-openssl&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-I&lt;/span&gt; D:/dev/int/src/messenger/mumble/00_src/OpenSSL/include &lt;span class=&quot;nt&quot;&gt;-L&lt;/span&gt; D:/dev/int/src/messenger/mumble/00_src/OpenSSL/lib &lt;span class=&quot;nt&quot;&gt;-platform&lt;/span&gt; win32-msvc2010 &lt;span class=&quot;nt&quot;&gt;-no-dbus&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-nomake&lt;/span&gt; examples &lt;span class=&quot;nt&quot;&gt;-nomake&lt;/span&gt; tests &lt;span class=&quot;nt&quot;&gt;-ltcg&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-mp&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-opensource&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-confirm-license&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;without OpenGL
    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;configure &lt;span class=&quot;nt&quot;&gt;-release&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-static&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtxmlpatterns &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtdeclarative &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtquickcontrols &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtmultimedia &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtactiveqt &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtlocation &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtsensors &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtconnectivity &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtwebkit &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtwebkit-examples &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtimageformats &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtgraphicaleffects &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtscript &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtquick1 &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtserialport &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtenginio &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtwebsockets &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtwebchannel &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtwebengine &lt;span class=&quot;nt&quot;&gt;-skip&lt;/span&gt; qtdoc &lt;span class=&quot;nt&quot;&gt;-qt-sql-sqlite&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-qt-zlib&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-qt-libpng&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-qt-libjpeg&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-openssl&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-I&lt;/span&gt; D:/dev/int/src/messenger/mumble/00_src/OpenSSL/include &lt;span class=&quot;nt&quot;&gt;-L&lt;/span&gt; D:/dev/int/src/messenger/mumble/00_src/OpenSSL/lib &lt;span class=&quot;nt&quot;&gt;-platform&lt;/span&gt; win32-msvc2010 &lt;span class=&quot;nt&quot;&gt;-no-opengl&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-no-angle&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-no-dbus&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-nomake&lt;/span&gt; examples &lt;span class=&quot;nt&quot;&gt;-nomake&lt;/span&gt; tests &lt;span class=&quot;nt&quot;&gt;-ltcg&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-mp&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-opensource&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-confirm-license&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;Ref: &lt;a href=&quot;http://doc.qt.io/qt-5/windows-requirements.html&quot;&gt;Qt for Windows - Requirements&lt;/a&gt;, &lt;a href=&quot;http://stackoverflow.com/questions/27759754/qt-5-4-static-build-produces-unresolved-external-symbol-link-error-in-visual-s&quot;&gt;StackoverFlow&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
				<pubDate>Sat, 02 Apr 2016 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2016/04/02/qt5_build_option/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2016/04/02/qt5_build_option/</guid>
			</item>
		
			<item>
				<title>CSnapDialog</title>
				        
        <description>&lt;p&gt;A simple template class which implements &lt;strong&gt;snap-to-edge&lt;/strong&gt; functionality for some &lt;strong&gt;QWidgets&lt;/strong&gt;.&lt;/p&gt;

&lt;script src=&quot;https://gist.github.com/surinkim/7d01fe3260ae221dc887.js&quot;&gt;&lt;/script&gt;

</description>
				<pubDate>Sun, 02 Aug 2015 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2015/08/02/snap_dialog/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2015/08/02/snap_dialog/</guid>
			</item>
		
			<item>
				<title>Random in C++ 11</title>
				        
        <description>&lt;p&gt;random값을 뽑을 때, 기존 c 런타임의 srand()와 rand()를 이용했는데 c++ 11에서는 아래처럼 사용할 수 있다.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-c--&quot; data-lang=&quot;c++&quot;&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c1&quot;&gt;//c runtime&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;srand&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;unsigned&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;rand&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
 
&lt;span class=&quot;c1&quot;&gt;//c++ 11&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;default_random_engine&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;((&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;unsigned&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;time&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;));&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;//or&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;default_random_engine&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;random_device&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{}());&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;srand()는 인자로 받아온 seed값으로 의사 난수(pseudo random number)기를 초기화 한다. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;std::default_random_engine&lt;/code&gt;은 의사 난수를 생성하는 클래스다.&lt;/p&gt;

&lt;p&gt;위 둘은 난수 발생기의 위치가 어디에 있느냐에 그 차이가 있다.&lt;br /&gt;
rand()는 내부에 의사 난수기의 상태를 static data로 가지고 있기 때문에 멀티 스레드에 안전하도록 내부적인 장치가 있다.&lt;br /&gt;
이에 반해, default_random_engine은 우리가 직접 다룰 수 있다. 스택에 생성했다면 동기화 처리도 필요없다. 그래서 동기화할 필요가 없는 상황이라면 default_random_engine이 rand()보다 더 빠르다고 한다.&lt;/p&gt;

&lt;p&gt;게임에서 특정 정보 등을 랜덤하게 가져와 사용한다고 하면, 아래처럼 쓸 수 있겠다.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-c--&quot; data-lang=&quot;c++&quot;&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SkillInfo&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;id_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;name_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
 
&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;vector&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SkillInfo&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;skill_Info&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; 
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3001&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;섬멸&quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3013&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;중독&quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3018&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;소환&quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3035&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;투명&quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3073&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;질주&quot;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
 
    &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;default_random_engine&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;random_device&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{}());&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;auto&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;GetRanomSkillInfo&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]()&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;shuffle&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;skill_Info&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;begin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;skill_Info&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;engine&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
 
    &lt;span class=&quot;k&quot;&gt;auto&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;PrintSkillInfo&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;skill_Info&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]()&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;for_each&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;skill_Info&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;begin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;skill_Info&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(),&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;](&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;SkillInfo&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;info&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;id = &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;info&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;id_&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;, name = &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;info&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;name_&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;endl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
 
    &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;==========&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;endl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;GetRanomSkillInfo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;PrintSkillInfo&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
     
    &lt;span class=&quot;n&quot;&gt;getchar&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
 
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;아래 링크에, C++ 11에서 random number 사용에 관한 12 page짜리(!) guide 문서가 있다.&lt;br /&gt;
&lt;a href=&quot;http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3551.pdf&quot;&gt;Random Number Generation in C++ 11&lt;/a&gt;&lt;/p&gt;
</description>
				<pubDate>Wed, 03 Dec 2014 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2014/12/03/random_in_c++11/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2014/12/03/random_in_c++11/</guid>
			</item>
		
			<item>
				<title>std::tuple</title>
				        
        <description>&lt;p&gt;c++11에 포함된 std::tuple은 개념상으로는 POD(Plain old data) 를 가지는 struct와 유사하지만, struct가 이름으로 멤버에 접근하는 대신 tuple의 멤버들은 tuple내의 순서로 접근한다.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-c--&quot; data-lang=&quot;c++&quot;&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c1&quot;&gt;//struct exmaple&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ExampleST&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;     &lt;span class=&quot;n&quot;&gt;id_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;string&lt;/span&gt;  &lt;span class=&quot;n&quot;&gt;name_&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
 
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;example_st&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;john&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
 
&lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;id = &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;example_st&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;id_&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;endl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;name = &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;example_st&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;name_&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;endl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
 
&lt;span class=&quot;c1&quot;&gt;//tuple example&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;enum&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ID&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;NAME&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tuple&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;example_tu&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;suzi&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;id = &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;example_tu&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;endl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;name = &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;example_tu&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;endl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;std::tie는 tuple object를 unpacking 할 때 사용된다. 그러니까 tie의 인자로 받는 변수에 tuple 오브젝트 내의 데이터를 순서대로 ‘묶어준다.’ 이때, tuple내의 특정 데이터를 묶을 필요가 없다면 std::ignore 상수를 사용한다.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-c--&quot; data-lang=&quot;c++&quot;&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tie&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ignore&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;example_tu&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;tied id = &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;endl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;std::tie를 쓰면 아래처럼 swap처리를 간단히 할 수 있다.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-c--&quot; data-lang=&quot;c++&quot;&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;c1&quot;&gt;//보통의 swap 처리&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;z&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;temp&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;z&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;temp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
 
&lt;span class=&quot;c1&quot;&gt;//std::tie를 사용한 swap 처리&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;z&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tie&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;make_tuple&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;그리고, sort의 기준이 여러 개일때, tuple의 진가가 발휘된다. 아래와 같은 배열을 정렬하는데, 첫번째 값이 동일하면 두번째 값을, 두번째 값이 동일하면 세번째 값을 비교하는 식으로 정렬한다고 해보자. 보통은 operator &amp;gt;나 operater &amp;lt;를 정의하고, 내부에서는 if else를 써야 할 것이다. 아래 코드는 이것을 간결하게 처리한다.&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-c--&quot; data-lang=&quot;c++&quot;&gt;&lt;table class=&quot;rouge-table&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter gl&quot;&gt;&lt;pre class=&quot;lineno&quot;&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ArrayNums&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;num&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;array_nums&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3000&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1001&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2002&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3003&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1001&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2001&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3001&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1001&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2002&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;3002&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
 
&lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;&amp;lt;before sorting&amp;gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;endl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;for_each&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;begin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;array_nums&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;array_nums&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;](&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ArrayNums&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;num&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;, &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;num&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;, &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;num&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;endl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
 
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
 
&lt;span class=&quot;c1&quot;&gt;//오름차순 sorting에 사용할 lambda func&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;auto&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;array_less&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[](&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ArrayNums&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ArrayNums&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;bool&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tie&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;num&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;num&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;num&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;tie&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;num&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;num&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;num&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]));&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
 
&lt;span class=&quot;c1&quot;&gt;//sorting&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;sort&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;begin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;array_nums&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;array_nums&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;array_less&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
 
&lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;endl&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;&amp;lt;after sorting&amp;gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;endl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;for_each&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;begin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;array_nums&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;end&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;array_nums&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;),&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;](&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ArrayNums&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;cout&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;num&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;, &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;num&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;, &quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;num&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;endl&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
 
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

</description>
				<pubDate>Sun, 21 Sep 2014 00:00:00 +0000</pubDate>
				<link>https://corecode.pe.kr/normal/2014/09/21/std_tuple_usage/</link>
				<guid isPermaLink="true">https://corecode.pe.kr/normal/2014/09/21/std_tuple_usage/</guid>
			</item>
		
	</channel>
</rss>