<?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: 이동욱</title>
    <description>The latest articles on DEV Community by 이동욱 (@dongwookhenrylee).</description>
    <link>https://dev.to/dongwookhenrylee</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%2F3977395%2F859fe6d4-1788-4f7f-8c73-335b759736a2.jpeg</url>
      <title>DEV Community: 이동욱</title>
      <link>https://dev.to/dongwookhenrylee</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dongwookhenrylee"/>
    <language>en</language>
    <item>
      <title>How Much Product Planning Knowledge Does a Developer Truly Need?</title>
      <dc:creator>이동욱</dc:creator>
      <pubDate>Wed, 10 Jun 2026 09:58:27 +0000</pubDate>
      <link>https://dev.to/dongwookhenrylee/how-much-product-planning-knowledge-does-a-developer-truly-need-2cbd</link>
      <guid>https://dev.to/dongwookhenrylee/how-much-product-planning-knowledge-does-a-developer-truly-need-2cbd</guid>
      <description>&lt;p&gt;Recently, a close friend of mine tossed a casual but lingering question at me:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Hey, have you ever actually done any product planning or business strategy while working and studying development?"&lt;/em&gt;&lt;br&gt;
&lt;em&gt;"Well... I did briefly consult an AI agent before starting a solo project, but honestly, I've been so focused on grinding my technical skills that I haven’t had any real hands-on experience with product planning."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After chewing on this conversation for a while, a fundamental question started to bug me:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How far should a developer’s knowledge of product planning actually go?&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Defining the Optimal Scope: Business Context and Trade-offs
&lt;/h3&gt;

&lt;p&gt;If human resources and time were infinite, the ideal scenario would be to become an absolute expert in everything—product management, UI/UX design, and core development. However, operating under the strict constraints of limited time and energy, we must optimize for maximum efficiency.&lt;/p&gt;

&lt;p&gt;Through this lens, I concluded that the optimal scope of planning knowledge for a developer begins with &lt;strong&gt;the ability to understand business objectives, analyze priorities, and make strategic trade-offs.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;More specifically, a developer must at least possess the analytical skill to parse the logical structure of a Product Requirement Document (PRD). &lt;/p&gt;

&lt;p&gt;This means understanding the data specs and hypotheses behind why a certain feature is flagged as P0 (highest priority), and judging whether it is genuinely worth the engineering resources. While the required depth of this knowledge expands based on the product’s lifecycle and business growth, this baseline is an absolute prerequisite for any engineer.&lt;/p&gt;




&lt;h3&gt;
  
  
  Shifting from Passive Coder to Product-Minded Engineer
&lt;/h3&gt;

&lt;p&gt;At the end of the day, technology is merely a vehicle to solve business problems. No matter how strictly we adhere to requirements or how flawlessly we ship clean code, if the feature fails to hit Product-Market Fit (PMF) or solve a user's core pain point, &lt;strong&gt;does that engineering effort truly hold value?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before shifts in my perspective, I functioned primarily as a passive executioner—simply translating a static list of features from a spec sheet onto a user interface. &lt;/p&gt;

&lt;p&gt;However, as I began encountering framework concepts like &lt;strong&gt;MECE (Mutually Exclusive, Collectively Exhaustive)&lt;/strong&gt; at my workplace and learning the nuts and bolts of business architecture, &lt;/p&gt;

&lt;p&gt;I realized how critical it is for developers to maintain a logical balance from a business standpoint.&lt;/p&gt;




&lt;p&gt;Now, when a request like "Please add this feature" lands on my desk, I don't want to just mindlessly type code or offload the prompt to an LLM agent like Claude. &lt;/p&gt;

&lt;p&gt;I want to build a cognitive filter that asks: &lt;strong&gt;"Does this feature actively drive our product's core north-star metric?"&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Moving Forward
&lt;/h3&gt;

&lt;p&gt;I am still in the early stages of parsing business terminology and product management workflows. However, I am increasingly convinced that moving beyond the level of simply clearing development tickets quickly is essential.&lt;/p&gt;

&lt;p&gt;The future belongs to engineers who can look at the bigger picture, understand why a business exists, and collaboratively figure out where to allocate finite engineering resources to generate the highest business impact. This realization is precisely why I am documenting this journey.&lt;/p&gt;




&lt;p&gt;What are your thoughts? How much product or business knowledge do you think a developer needs in your team? Let's discuss in the comments!&lt;/p&gt;

</description>
      <category>career</category>
      <category>webdev</category>
      <category>product</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Mobile Web Debugging, Secure Context, and OAuth 2.0 Security Policies</title>
      <dc:creator>이동욱</dc:creator>
      <pubDate>Fri, 10 Apr 2026 09:00:57 +0000</pubDate>
      <link>https://dev.to/dongwookhenrylee/mobile-web-debugging-secure-context-and-oauth-20-security-policies-12mj</link>
      <guid>https://dev.to/dongwookhenrylee/mobile-web-debugging-secure-context-and-oauth-20-security-policies-12mj</guid>
      <description>&lt;h3&gt;
  
  
  Intro
&lt;/h3&gt;

&lt;p&gt;One of the concepts you’ll inevitably encounter during front-end development is that there are differences between a localhost-based desktop environment and a mobile device environment using a private IP address during the development and testing phases.&lt;/p&gt;

&lt;p&gt;In a &lt;strong&gt;localhost-based desktop environment&lt;/strong&gt;, &lt;strong&gt;127.0.0.1&lt;/strong&gt; is a &lt;strong&gt;local loopback address&lt;/strong&gt; that refers to the local machine itself. It can only be accessed from within that specific computer; other computers or devices, such as smartphones, cannot connect to it via &lt;code&gt;localhost:3000&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In contrast, in a &lt;strong&gt;private IP-based mobile environment&lt;/strong&gt;, addresses such as &lt;strong&gt;192.168.x.x&lt;/strong&gt; are assigned by the router to devices within the same Wi-Fi network, making them accessible from all devices connected to the same internal network.&lt;/p&gt;

&lt;p&gt;The reason why the authentication process is blocked or unexpected errors occur exclusively on mobile devices, even though the code is identical, is also due to the differing &lt;strong&gt;security contexts&lt;/strong&gt; applied based on this addressing scheme.&lt;/p&gt;

&lt;p&gt;In this post, we will explore the fundamental differences between desktop and mobile environments by examining network and browser engine behaviors, and summarize the technical considerations necessary for stable mobile web debugging.&lt;/p&gt;




&lt;h3&gt;
  
  
  1. ‘Potentially Trustworthy’ and Localhost Privileges
&lt;/h3&gt;

&lt;p&gt;Modern browsers adhere to a &lt;strong&gt;Secure Context&lt;/strong&gt; policy that restricts sensitive API calls in environments where the &lt;code&gt;https&lt;/code&gt; protocol is not available, for security reasons.&lt;/p&gt;

&lt;p&gt;However, to enhance development convenience, &lt;code&gt;localhost&lt;/code&gt; and &lt;code&gt;127.0.0.1&lt;/code&gt; are classified as exceptions—&lt;strong&gt;Potentially Trustworthy Hosts&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;As a result, when developing locally using the &lt;code&gt;http&lt;/code&gt; protocol, you can use service workers and encryption-related APIs without restrictions.&lt;/p&gt;

&lt;p&gt;Conversely, the moment a mobile device connects to a desktop’s private IP address, the browser treats this as a &lt;strong&gt;general Insecure Context&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This difference triggers security checks at the browser engine level and blocks the core logic responsible for handling authentication tokens.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. OAuth 2.0 Redirection and Strict Origin Matching
&lt;/h3&gt;

&lt;p&gt;The difference in address schemes is particularly evident in &lt;strong&gt;social login (OAuth 2.0)&lt;/strong&gt; environments.&lt;/p&gt;

&lt;p&gt;This is because the identity provider (IDP) verifies, for security reasons, whether the request URI perfectly matches the pre-registered &lt;code&gt;redirect_uri&lt;/code&gt;—from the protocol to the port.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;desktop&lt;/strong&gt;, the previously mentioned &lt;code&gt;http://localhost:3000&lt;/code&gt; is a loopback address that most IDPs, such as Google and Kakao—which are widely used for social login—allow for testing purposes.&lt;/p&gt;

&lt;p&gt;However, on &lt;strong&gt;mobile&lt;/strong&gt; devices, if you attempt to connect via the private IP address &lt;code&gt;http://192.168.x.x:3000&lt;/code&gt;, you will encounter a &lt;code&gt;redirect_uri_mismatch&lt;/code&gt; error in the IDP settings if it has not been pre-registered.&lt;/p&gt;

&lt;p&gt;This is because, from the authentication server’s perspective, IP addresses on private networks are not considered trustworthy endpoints.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Mobile Browser Engine Security Policies (WebKit ITP)
&lt;/h3&gt;

&lt;p&gt;Safari on the iPhone employs a security policy called &lt;strong&gt;ITP (Intelligent Tracking Prevention)&lt;/strong&gt;, which is much stricter than that of desktop browsers.&lt;/p&gt;

&lt;p&gt;ITP strictly limits data sharing that occurs when moving between domains and the use of third-party cookies. During the social login process, when the browser tab switches and then returns, the mobile engine is likely to suspect this as &lt;code&gt;user tracking behavior&lt;/code&gt; and block the session or cookies.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. OS-Level Process and Resource Management
&lt;/h3&gt;

&lt;p&gt;In addition to authentication policies, unlike desktop systems, mobile OSes manage background processes very strictly to conserve battery life and memory.&lt;/p&gt;

&lt;p&gt;For example, when using a specific service and briefly leaving the browser to switch context to an authentication app for social login, the network sockets or memory state occupied by the browser may be &lt;code&gt;paused&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Consequently, when returning to the browser, there is a risk that the authentication handshake will time out or the network stack will reset, causing the authentication flow to be interrupted.&lt;/p&gt;




&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;The following approaches are recommended for stable mobile debugging:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Utilize ngrok/Cloudflare Tunnel&lt;/strong&gt;: Assign a temporary &lt;code&gt;https&lt;/code&gt; public domain to the local server to establish a Secure Context.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Synchronize IdP Settings&lt;/strong&gt;: Immediately add the actual connection address to the authentication server’s whitelist.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Understanding browser engine policies&lt;/strong&gt;: Continuously track the latest security policies (such as ITP) of the mobile browser engine you are targeting.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The importance of abstract knowledge—such as network address systems or OS process management—that I memorized during my academic studies only truly becomes apparent when I encounter the reality of conflicts with mobile device security policies in practical work.&lt;/p&gt;

&lt;p&gt;Starting with the question, “Why does it work on my computer but not in other environments?” and examining the underlying network mechanisms,&lt;/p&gt;

&lt;p&gt;I realized that a deep understanding of physical address differences and browser engine security contexts is the true skill required to create not just “working code,” but a “service trusted everywhere.”&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>mobile</category>
      <category>security</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
