<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>프로젝트 on goodkid's homelab</title><link>http://goodkid0078.store/tags/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8/</link><description>Recent content in 프로젝트 on goodkid's homelab</description><generator>Hugo</generator><language>ko-kr</language><lastBuildDate>Wed, 06 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="http://goodkid0078.store/tags/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8/index.xml" rel="self" type="application/rss+xml"/><item><title>온프레미스 + AWS 하이브리드 헬스케어 플랫폼 구축기</title><link>http://goodkid0078.store/boulders/%EC%98%A8%ED%94%84%EB%A0%88%EB%AF%B8%EC%8A%A4-aws-%ED%95%98%EC%9D%B4%EB%B8%8C%EB%A6%AC%EB%93%9C-%ED%97%AC%EC%8A%A4%EC%BC%80%EC%96%B4-%ED%94%8C%EB%9E%AB%ED%8F%BC-%EA%B5%AC%EC%B6%95%EA%B8%B0/</link><pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate><guid>http://goodkid0078.store/boulders/%EC%98%A8%ED%94%84%EB%A0%88%EB%AF%B8%EC%8A%A4-aws-%ED%95%98%EC%9D%B4%EB%B8%8C%EB%A6%AC%EB%93%9C-%ED%97%AC%EC%8A%A4%EC%BC%80%EC%96%B4-%ED%94%8C%EB%9E%AB%ED%8F%BC-%EA%B5%AC%EC%B6%95%EA%B8%B0/</guid><description>&lt;h1 id="온프레미스--aws-하이브리드-헬스케어-플랫폼-구축기">온프레미스 + AWS 하이브리드 헬스케어 플랫폼 구축기&lt;/h1>
&lt;blockquote>
&lt;p>OpenStack 위에 K8s 클러스터를 올리고, Terraform으로 AWS 인프라를 코드 한 줄로 찍어내고, strongSwan VPN으로 온프레미스와 AWS를 이어붙인 팀 프로젝트 전 과정 기록이다.&lt;/p>&lt;/blockquote>
&lt;hr>
&lt;h2 id="프로젝트-개요">프로젝트 개요&lt;/h2>
&lt;p>헬스케어 데이터 분석 파이프라인을 온프레미스(OpenStack + K8s)와 AWS(SQS + Spot EC2 + S3)를 연결해 구축한 하이브리드 클라우드 프로젝트다.&lt;/p>
&lt;p>&lt;strong>핵심 흐름:&lt;/strong>&lt;/p>
&lt;div class="goat svg-container ">
&lt;svg
xmlns="http://www.w3.org/2000/svg"
font-family="Menlo,Lucida Console,monospace"
viewBox="0 0 288 137"
>
&lt;g transform='translate(8,16)'>
&lt;text text-anchor='middle' x='0' y='20' fill='currentColor' style='font-size:1em'>온&lt;/text>
&lt;text text-anchor='middle' x='0' y='52' fill='currentColor' style='font-size:1em'>A&lt;/text>
&lt;text text-anchor='middle' x='0' y='84' fill='currentColor' style='font-size:1em'>온&lt;/text>
&lt;text text-anchor='middle' x='0' y='116' fill='currentColor' style='font-size:1em'>g&lt;/text>
&lt;text text-anchor='middle' x='8' y='20' fill='currentColor' style='font-size:1em'>프&lt;/text>
&lt;text text-anchor='middle' x='8' y='52' fill='currentColor' style='font-size:1em'>W&lt;/text>
&lt;text text-anchor='middle' x='8' y='84' fill='currentColor' style='font-size:1em'>프&lt;/text>
&lt;text text-anchor='middle' x='8' y='116' fill='currentColor' style='font-size:1em'>a&lt;/text>
&lt;text text-anchor='middle' x='16' y='20' fill='currentColor' style='font-size:1em'>레&lt;/text>
&lt;text text-anchor='middle' x='16' y='52' fill='currentColor' style='font-size:1em'>S&lt;/text>
&lt;text text-anchor='middle' x='16' y='84' fill='currentColor' style='font-size:1em'>레&lt;/text>
&lt;text text-anchor='middle' x='16' y='116' fill='currentColor' style='font-size:1em'>t&lt;/text>
&lt;text text-anchor='middle' x='24' y='20' fill='currentColor' style='font-size:1em'>미&lt;/text>
&lt;text text-anchor='middle' x='24' y='84' fill='currentColor' style='font-size:1em'>미&lt;/text>
&lt;text text-anchor='middle' x='24' y='116' fill='currentColor' style='font-size:1em'>s&lt;/text>
&lt;text text-anchor='middle' x='32' y='20' fill='currentColor' style='font-size:1em'>스&lt;/text>
&lt;text text-anchor='middle' x='32' y='36' fill='currentColor' style='font-size:1em'>↓&lt;/text>
&lt;text text-anchor='middle' x='32' y='52' fill='currentColor' style='font-size:1em'>S&lt;/text>
&lt;text text-anchor='middle' x='32' y='68' fill='currentColor' style='font-size:1em'>↓&lt;/text>
&lt;text text-anchor='middle' x='32' y='84' fill='currentColor' style='font-size:1em'>스&lt;/text>
&lt;text text-anchor='middle' x='32' y='100' fill='currentColor' style='font-size:1em'>↓&lt;/text>
&lt;text text-anchor='middle' x='32' y='116' fill='currentColor' style='font-size:1em'>a&lt;/text>
&lt;text text-anchor='middle' x='40' y='52' fill='currentColor' style='font-size:1em'>p&lt;/text>
&lt;text text-anchor='middle' x='40' y='116' fill='currentColor' style='font-size:1em'>.&lt;/text>
&lt;text text-anchor='middle' x='48' y='20' fill='currentColor' style='font-size:1em'>K&lt;/text>
&lt;text text-anchor='middle' x='48' y='36' fill='currentColor' style='font-size:1em'>S&lt;/text>
&lt;text text-anchor='middle' x='48' y='52' fill='currentColor' style='font-size:1em'>o&lt;/text>
&lt;text text-anchor='middle' x='48' y='68' fill='currentColor' style='font-size:1em'>S&lt;/text>
&lt;text text-anchor='middle' x='48' y='84' fill='currentColor' style='font-size:1em'>K&lt;/text>
&lt;text text-anchor='middle' x='48' y='100' fill='currentColor' style='font-size:1em'>M&lt;/text>
&lt;text text-anchor='middle' x='48' y='116' fill='currentColor' style='font-size:1em'>s&lt;/text>
&lt;text text-anchor='middle' x='56' y='20' fill='currentColor' style='font-size:1em'>8&lt;/text>
&lt;text text-anchor='middle' x='56' y='36' fill='currentColor' style='font-size:1em'>Q&lt;/text>
&lt;text text-anchor='middle' x='56' y='52' fill='currentColor' style='font-size:1em'>t&lt;/text>
&lt;text text-anchor='middle' x='56' y='68' fill='currentColor' style='font-size:1em'>Q&lt;/text>
&lt;text text-anchor='middle' x='56' y='84' fill='currentColor' style='font-size:1em'>8&lt;/text>
&lt;text text-anchor='middle' x='56' y='100' fill='currentColor' style='font-size:1em'>a&lt;/text>
&lt;text text-anchor='middle' x='56' y='116' fill='currentColor' style='font-size:1em'>h&lt;/text>
&lt;text text-anchor='middle' x='64' y='20' fill='currentColor' style='font-size:1em'>s&lt;/text>
&lt;text text-anchor='middle' x='64' y='36' fill='currentColor' style='font-size:1em'>S&lt;/text>
&lt;text text-anchor='middle' x='64' y='68' fill='currentColor' style='font-size:1em'>S&lt;/text>
&lt;text text-anchor='middle' x='64' y='84' fill='currentColor' style='font-size:1em'>s&lt;/text>
&lt;text text-anchor='middle' x='64' y='100' fill='currentColor' style='font-size:1em'>r&lt;/text>
&lt;text text-anchor='middle' x='64' y='116' fill='currentColor' style='font-size:1em'>o&lt;/text>
&lt;text text-anchor='middle' x='72' y='52' fill='currentColor' style='font-size:1em'>E&lt;/text>
&lt;text text-anchor='middle' x='72' y='100' fill='currentColor' style='font-size:1em'>i&lt;/text>
&lt;text text-anchor='middle' x='72' y='116' fill='currentColor' style='font-size:1em'>p&lt;/text>
&lt;text text-anchor='middle' x='80' y='20' fill='currentColor' style='font-size:1em'>P&lt;/text>
&lt;text text-anchor='middle' x='80' y='36' fill='currentColor' style='font-size:1em'>입&lt;/text>
&lt;text text-anchor='middle' x='80' y='52' fill='currentColor' style='font-size:1em'>C&lt;/text>
&lt;text text-anchor='middle' x='80' y='68' fill='currentColor' style='font-size:1em'>결&lt;/text>
&lt;text text-anchor='middle' x='80' y='84' fill='currentColor' style='font-size:1em'>P&lt;/text>
&lt;text text-anchor='middle' x='80' y='100' fill='currentColor' style='font-size:1em'>a&lt;/text>
&lt;text text-anchor='middle' x='88' y='20' fill='currentColor' style='font-size:1em'>o&lt;/text>
&lt;text text-anchor='middle' x='88' y='36' fill='currentColor' style='font-size:1em'>력&lt;/text>
&lt;text text-anchor='middle' x='88' y='52' fill='currentColor' style='font-size:1em'>2&lt;/text>
&lt;text text-anchor='middle' x='88' y='68' fill='currentColor' style='font-size:1em'>과&lt;/text>
&lt;text text-anchor='middle' x='88' y='84' fill='currentColor' style='font-size:1em'>o&lt;/text>
&lt;text text-anchor='middle' x='88' y='100' fill='currentColor' style='font-size:1em'>D&lt;/text>
&lt;text text-anchor='middle' x='88' y='116' fill='currentColor' style='font-size:1em'>웹&lt;/text>
&lt;text text-anchor='middle' x='96' y='20' fill='currentColor' style='font-size:1em'>d&lt;/text>
&lt;text text-anchor='middle' x='96' y='84' fill='currentColor' style='font-size:1em'>d&lt;/text>
&lt;text text-anchor='middle' x='96' y='100' fill='currentColor' style='font-size:1em'>B&lt;/text>
&lt;text text-anchor='middle' x='104' y='36' fill='currentColor' style='font-size:1em'>큐&lt;/text>
&lt;text text-anchor='middle' x='104' y='52' fill='currentColor' style='font-size:1em'>(&lt;/text>
&lt;text text-anchor='middle' x='104' y='68' fill='currentColor' style='font-size:1em'>큐&lt;/text>
&lt;text text-anchor='middle' x='104' y='116' fill='currentColor' style='font-size:1em'>대&lt;/text>
&lt;text text-anchor='middle' x='112' y='20' fill='currentColor' style='font-size:1em'>(&lt;/text>
&lt;text text-anchor='middle' x='112' y='52' fill='currentColor' style='font-size:1em'>A&lt;/text>
&lt;text text-anchor='middle' x='112' y='84' fill='currentColor' style='font-size:1em'>(&lt;/text>
&lt;text text-anchor='middle' x='112' y='100' fill='currentColor' style='font-size:1em'>저&lt;/text>
&lt;text text-anchor='middle' x='112' y='116' fill='currentColor' style='font-size:1em'>시&lt;/text>
&lt;text text-anchor='middle' x='120' y='20' fill='currentColor' style='font-size:1em'>M&lt;/text>
&lt;text text-anchor='middle' x='120' y='52' fill='currentColor' style='font-size:1em'>n&lt;/text>
&lt;text text-anchor='middle' x='120' y='84' fill='currentColor' style='font-size:1em'>S&lt;/text>
&lt;text text-anchor='middle' x='120' y='100' fill='currentColor' style='font-size:1em'>장&lt;/text>
&lt;text text-anchor='middle' x='120' y='116' fill='currentColor' style='font-size:1em'>보&lt;/text>
&lt;text text-anchor='middle' x='128' y='20' fill='currentColor' style='font-size:1em'>E&lt;/text>
&lt;text text-anchor='middle' x='128' y='52' fill='currentColor' style='font-size:1em'>a&lt;/text>
&lt;text text-anchor='middle' x='128' y='84' fill='currentColor' style='font-size:1em'>Q&lt;/text>
&lt;text text-anchor='middle' x='128' y='116' fill='currentColor' style='font-size:1em'>드&lt;/text>
&lt;text text-anchor='middle' x='136' y='20' fill='currentColor' style='font-size:1em'>S&lt;/text>
&lt;text text-anchor='middle' x='136' y='52' fill='currentColor' style='font-size:1em'>l&lt;/text>
&lt;text text-anchor='middle' x='136' y='84' fill='currentColor' style='font-size:1em'>S&lt;/text>
&lt;text text-anchor='middle' x='144' y='52' fill='currentColor' style='font-size:1em'>y&lt;/text>
&lt;text text-anchor='middle' x='152' y='20' fill='currentColor' style='font-size:1em'>D&lt;/text>
&lt;text text-anchor='middle' x='152' y='52' fill='currentColor' style='font-size:1em'>z&lt;/text>
&lt;text text-anchor='middle' x='152' y='84' fill='currentColor' style='font-size:1em'>P&lt;/text>
&lt;text text-anchor='middle' x='160' y='20' fill='currentColor' style='font-size:1em'>a&lt;/text>
&lt;text text-anchor='middle' x='160' y='52' fill='currentColor' style='font-size:1em'>e&lt;/text>
&lt;text text-anchor='middle' x='160' y='84' fill='currentColor' style='font-size:1em'>o&lt;/text>
&lt;text text-anchor='middle' x='168' y='20' fill='currentColor' style='font-size:1em'>t&lt;/text>
&lt;text text-anchor='middle' x='168' y='52' fill='currentColor' style='font-size:1em'>r&lt;/text>
&lt;text text-anchor='middle' x='168' y='84' fill='currentColor' style='font-size:1em'>l&lt;/text>
&lt;text text-anchor='middle' x='176' y='20' fill='currentColor' style='font-size:1em'>a&lt;/text>
&lt;text text-anchor='middle' x='176' y='52' fill='currentColor' style='font-size:1em'>)&lt;/text>
&lt;text text-anchor='middle' x='176' y='84' fill='currentColor' style='font-size:1em'>l&lt;/text>
&lt;text text-anchor='middle' x='184' y='84' fill='currentColor' style='font-size:1em'>i&lt;/text>
&lt;text text-anchor='middle' x='192' y='20' fill='currentColor' style='font-size:1em'>S&lt;/text>
&lt;text text-anchor='middle' x='192' y='84' fill='currentColor' style='font-size:1em'>n&lt;/text>
&lt;text text-anchor='middle' x='200' y='20' fill='currentColor' style='font-size:1em'>e&lt;/text>
&lt;text text-anchor='middle' x='200' y='84' fill='currentColor' style='font-size:1em'>g&lt;/text>
&lt;text text-anchor='middle' x='208' y='20' fill='currentColor' style='font-size:1em'>r&lt;/text>
&lt;text text-anchor='middle' x='216' y='20' fill='currentColor' style='font-size:1em'>v&lt;/text>
&lt;text text-anchor='middle' x='216' y='84' fill='currentColor' style='font-size:1em'>S&lt;/text>
&lt;text text-anchor='middle' x='224' y='20' fill='currentColor' style='font-size:1em'>i&lt;/text>
&lt;text text-anchor='middle' x='224' y='84' fill='currentColor' style='font-size:1em'>e&lt;/text>
&lt;text text-anchor='middle' x='232' y='20' fill='currentColor' style='font-size:1em'>c&lt;/text>
&lt;text text-anchor='middle' x='232' y='84' fill='currentColor' style='font-size:1em'>r&lt;/text>
&lt;text text-anchor='middle' x='240' y='20' fill='currentColor' style='font-size:1em'>e&lt;/text>
&lt;text text-anchor='middle' x='240' y='84' fill='currentColor' style='font-size:1em'>v&lt;/text>
&lt;text text-anchor='middle' x='248' y='20' fill='currentColor' style='font-size:1em'>)&lt;/text>
&lt;text text-anchor='middle' x='248' y='84' fill='currentColor' style='font-size:1em'>i&lt;/text>
&lt;text text-anchor='middle' x='256' y='84' fill='currentColor' style='font-size:1em'>c&lt;/text>
&lt;text text-anchor='middle' x='264' y='84' fill='currentColor' style='font-size:1em'>e&lt;/text>
&lt;text text-anchor='middle' x='272' y='84' fill='currentColor' style='font-size:1em'>)&lt;/text>
&lt;/g>
&lt;/svg>
&lt;/div>
&lt;p>&lt;strong>기술 스택:&lt;/strong>&lt;/p></description></item></channel></rss>