<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: donghun lee (David Lee)</title>
    <description>The latest articles on DEV Community by donghun lee (David Lee) (@david_hundong2).</description>
    <link>https://dev.to/david_hundong2</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3136377%2Fe354a24d-405a-4c55-8e5a-e25899cfd4ac.jpg</url>
      <title>DEV Community: donghun lee (David Lee)</title>
      <link>https://dev.to/david_hundong2</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/david_hundong2"/>
    <language>en</language>
    <item>
      <title>⚡ From Raw Sockets to Serverless: Reimagining the Architect's Portfolio</title>
      <dc:creator>donghun lee (David Lee)</dc:creator>
      <pubDate>Sat, 10 Jan 2026 15:54:21 +0000</pubDate>
      <link>https://dev.to/david_hundong2/minimalist-fast-my-developer-portfolio-on-google-cloud-run-1k63</link>
      <guid>https://dev.to/david_hundong2/minimalist-fast-my-developer-portfolio-on-google-cloud-run-1k63</guid>
      <description>&lt;p&gt;&lt;strong&gt;Hello DEV Community! 👋&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I am a Senior .NET &amp;amp; C++ Architect with a deep interest in IoT networks and AI technologies. For the &lt;strong&gt;"New Year, New You Portfolio Challenge"&lt;/strong&gt;, I decided to refresh my online presence using a modern web stack and deploy it on &lt;strong&gt;Google Cloud Run&lt;/strong&gt; to leverage its serverless container capabilities.&lt;/p&gt;

&lt;p&gt;Here is the story of my journey from bare-metal memory management to mastering the container lifecycle.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 The Motivation: Making the Invisible, Visible
&lt;/h2&gt;

&lt;p&gt;As a backend architect, my career has been defined by things that are often invisible. I’ve spent years optimizing raw sockets, architecting IoT networks, and tuning low-level system performance. While this work is critical, it lacks a "visual" interface.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I wanted to build a portfolio that wasn't just a static CV, but a living proof of concept that combines my core engineering values—&lt;strong&gt;speed, control, and efficiency&lt;/strong&gt;—with modern web technologies."&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  🌐 The Result: Minimalist &amp;amp; Fast
&lt;/h3&gt;

&lt;p&gt;Before diving into the code, here is the live result running on a serverless container.&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__cloud-run"&gt;
  &lt;iframe height="600px" src="https://portfolio-825944830628.us-central1.run.app/"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;




&lt;p&gt;&lt;em&gt;(If the preview doesn't load, check it out here: &lt;a href="https://portfolio-825944830628.us-central1.run.app/" rel="noopener noreferrer"&gt;Live Demo Link&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🛠️ The Stack: A C++ Developer’s Approach
&lt;/h3&gt;

&lt;p&gt;When a system architect chooses a frontend stack, "hype" is irrelevant. &lt;strong&gt;Performance is everything.&lt;/strong&gt; I chose a stack that mirrors the efficiency I strive for in C++.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;⚛️ Frontend:&lt;/strong&gt; &lt;code&gt;React 19&lt;/code&gt; &amp;amp; &lt;code&gt;TypeScript&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;Chosen for type safety and modern UI patterns.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;⚡ Build Tool:&lt;/strong&gt; &lt;code&gt;esbuild&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;I deliberately chose &lt;strong&gt;esbuild&lt;/strong&gt; over Webpack. Why? Because it's written in &lt;strong&gt;Go&lt;/strong&gt; and compiles with near-native speed. As someone accustomed to C++ compilation times, waiting for JavaScript bundlers is painful. &lt;code&gt;esbuild&lt;/code&gt; brings that raw speed back.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;🖥️ Server:&lt;/strong&gt; &lt;code&gt;serve&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;A lightweight static file serving handler for production.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;☁️ Infrastructure:&lt;/strong&gt; &lt;code&gt;Docker&lt;/code&gt; &amp;amp; &lt;code&gt;Google Cloud Run&lt;/code&gt;

&lt;ul&gt;
&lt;li&gt;The star of the show. It allows me to deploy stateless containers that scale to zero.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h3&gt;
  
  
  🐛 The Challenge: The "Stdin" Trap
&lt;/h3&gt;

&lt;p&gt;The most interesting part of this project wasn't the React code, but the &lt;strong&gt;Container Lifecycle&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;During local development, I used &lt;code&gt;esbuild --serve&lt;/code&gt;. It worked perfectly on my machine. However, when I deployed to Cloud Run, &lt;strong&gt;the container would crash immediately upon startup.&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  The Diagnosis 🔍
&lt;/h4&gt;

&lt;p&gt;Cloud Run environments are non-interactive. My dev-server command was listening to &lt;code&gt;stdin&lt;/code&gt; (waiting for user input to exit), but in the serverless environment, the input stream is closed instantly. The process interpreted this as a signal to terminate.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Fix 🛠️
&lt;/h4&gt;

&lt;p&gt;I had to re-architect the entry point:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Separation:&lt;/strong&gt; I separated the build process (&lt;code&gt;esbuild&lt;/code&gt;) from the runtime process.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Daemon Process:&lt;/strong&gt; I switched to &lt;code&gt;serve&lt;/code&gt; for the production environment, which is designed to run as a daemon process rather than an interactive shell.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Dynamic Port:&lt;/strong&gt; I mapped the container's &lt;code&gt;PORT&lt;/code&gt; environment variable dynamically to ensure the health check probes could reach the application.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This troubleshooting process reminded me that whether it's an IoT device or a Cloud container, &lt;strong&gt;understanding the runtime environment is paramount.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  ☁️ Why Google Cloud Run?
&lt;/h3&gt;

&lt;p&gt;For a personal portfolio, running a dedicated VM (EC2) is a waste of resources, and simple static hosting (GitHub Pages) lacks the backend flexibility I plan to add later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google Cloud Run was the sweet spot because:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📦 &lt;strong&gt;Container-based:&lt;/strong&gt; I could simply package my app with Docker, ensuring it runs exactly the same locally and in production.&lt;/li&gt;
&lt;li&gt;📉 &lt;strong&gt;Scale to Zero:&lt;/strong&gt; It incurs &lt;strong&gt;zero cost&lt;/strong&gt; when no one is visiting the site, which is ideal for a personal portfolio.&lt;/li&gt;
&lt;li&gt;🔒 &lt;strong&gt;HTTPS Default:&lt;/strong&gt; It provides a secure URL automatically without complex SSL configurations.&lt;/li&gt;
&lt;li&gt;🔮 &lt;strong&gt;Future Proof:&lt;/strong&gt; It’s ready for the Python/AI backend services I plan to attach next.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  🚀 What's Next?
&lt;/h3&gt;

&lt;p&gt;This portfolio is just the foundation. My roadmap involves integrating my expertise in AI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;🤖 RAG Agent Integration:&lt;/strong&gt; I plan to embed a small LLM agent that can answer questions about my previous projects using RAG (Retrieval-Augmented Generation).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;📝 Tech Blog:&lt;/strong&gt; A section dedicated to deep dives into .NET architecture and Blazor Hybrid patterns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Building this portfolio was a refreshing exercise in applying low-level optimization mindsets to high-level cloud infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Happy Coding! 🚀&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🔗 Links
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live Portfolio:&lt;/strong&gt; &lt;a href="https://portfolio-825944830628.us-central1.run.app/" rel="noopener noreferrer"&gt;Visit Site&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/hundong2" rel="noopener noreferrer"&gt;hundong2&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LinkedIn:&lt;/strong&gt; &lt;a href="https://www.linkedin.com/in/donghun-lee-83b072170" rel="noopener noreferrer"&gt;Donghun Lee&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>googleaichallenge</category>
      <category>portfolio</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
