<?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>Forem: Aisalkyn Aidarova</title>
    <description>The latest articles on Forem by Aisalkyn Aidarova (@jumptotech).</description>
    <link>https://forem.com/jumptotech</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%2F3549986%2F206d9086-7051-445f-8608-9cfccb349e11.png</url>
      <title>Forem: Aisalkyn Aidarova</title>
      <link>https://forem.com/jumptotech</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/jumptotech"/>
    <language>en</language>
    <item>
      <title>Lab: next lab sre</title>
      <dc:creator>Aisalkyn Aidarova</dc:creator>
      <pubDate>Fri, 17 Apr 2026 04:10:44 +0000</pubDate>
      <link>https://forem.com/jumptotech/lab-next-lab-sre-26b6</link>
      <guid>https://forem.com/jumptotech/lab-next-lab-sre-26b6</guid>
      <description>&lt;h2&gt;
  
  
  Current lab
&lt;/h2&gt;

&lt;p&gt;You already have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Network A&lt;/li&gt;
&lt;li&gt;Network B&lt;/li&gt;
&lt;li&gt;Router between them &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Next lab
&lt;/h2&gt;

&lt;p&gt;We will add these ideas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Service separation&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Monitoring&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Controlled access&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Failure testing&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Basic reliability thinking&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is closer to SRE work.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why this helps for SRE
&lt;/h1&gt;

&lt;p&gt;An SRE does not only ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Can these two PCs ping?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;An SRE asks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the service reachable?&lt;/li&gt;
&lt;li&gt;Who should be allowed to access it?&lt;/li&gt;
&lt;li&gt;How do I know when it fails?&lt;/li&gt;
&lt;li&gt;What happens if one link goes down?&lt;/li&gt;
&lt;li&gt;How do I reduce blast radius?&lt;/li&gt;
&lt;li&gt;How do I isolate problems quickly?&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  New lab goal
&lt;/h1&gt;

&lt;p&gt;We will convert your current topology into this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Left subnet&lt;/strong&gt; = Clients / Users&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Right subnet&lt;/strong&gt; = Services / Servers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Router&lt;/strong&gt; = traffic path between them&lt;/li&gt;
&lt;li&gt;One PC on right side becomes &lt;strong&gt;Application Server&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;One PC on left or right side becomes &lt;strong&gt;Monitoring Node&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Add &lt;strong&gt;ACL&lt;/strong&gt; to control access&lt;/li&gt;
&lt;li&gt;Test &lt;strong&gt;failure scenarios&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Final design
&lt;/h1&gt;

&lt;p&gt;Use your same 2-subnet lab, but rename the purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Subnet 1
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.0/24
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Role:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Users&lt;/li&gt;
&lt;li&gt;Clients&lt;/li&gt;
&lt;li&gt;Engineers’ laptops&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Subnet 2
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.2.0/24
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Role:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;App server&lt;/li&gt;
&lt;li&gt;Monitoring target&lt;/li&gt;
&lt;li&gt;Internal services&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Router interfaces
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;G0/0 → 192.168.1.1
G0/1 → 192.168.2.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This matches the structure of your current lab, which already uses two routed networks. &lt;/p&gt;




&lt;h1&gt;
  
  
  What each part means in SRE terms
&lt;/h1&gt;

&lt;h2&gt;
  
  
  1. Client subnet
&lt;/h2&gt;

&lt;p&gt;This represents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;users&lt;/li&gt;
&lt;li&gt;internal engineers&lt;/li&gt;
&lt;li&gt;systems sending requests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In real life:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;office users&lt;/li&gt;
&lt;li&gt;jump hosts&lt;/li&gt;
&lt;li&gt;admin machines&lt;/li&gt;
&lt;li&gt;frontend callers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Service subnet
&lt;/h2&gt;

&lt;p&gt;This represents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;backend services&lt;/li&gt;
&lt;li&gt;internal APIs&lt;/li&gt;
&lt;li&gt;databases&lt;/li&gt;
&lt;li&gt;monitoring targets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In real life:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;app tier&lt;/li&gt;
&lt;li&gt;DB tier&lt;/li&gt;
&lt;li&gt;private service network&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Router
&lt;/h2&gt;

&lt;p&gt;This represents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;controlled traffic path&lt;/li&gt;
&lt;li&gt;segmentation between environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In real life, similar idea:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VPC routing&lt;/li&gt;
&lt;li&gt;service boundaries&lt;/li&gt;
&lt;li&gt;controlled network flow&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. ACL
&lt;/h2&gt;

&lt;p&gt;This represents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;security policy&lt;/li&gt;
&lt;li&gt;network restriction&lt;/li&gt;
&lt;li&gt;blast-radius control&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In real life:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;security groups&lt;/li&gt;
&lt;li&gt;network ACLs&lt;/li&gt;
&lt;li&gt;firewall rules&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Monitoring node
&lt;/h2&gt;

&lt;p&gt;This represents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;observability&lt;/li&gt;
&lt;li&gt;health checks&lt;/li&gt;
&lt;li&gt;alert source&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In real life:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prometheus server&lt;/li&gt;
&lt;li&gt;blackbox exporter&lt;/li&gt;
&lt;li&gt;uptime monitoring&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Lab roadmap
&lt;/h1&gt;

&lt;p&gt;We will do it in this order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Keep your current routing lab working&lt;/li&gt;
&lt;li&gt;Turn PCs into roles&lt;/li&gt;
&lt;li&gt;Add monitoring checks&lt;/li&gt;
&lt;li&gt;Add access control&lt;/li&gt;
&lt;li&gt;Simulate failure&lt;/li&gt;
&lt;li&gt;Document what happened&lt;/li&gt;
&lt;li&gt;Explain why this is SRE work&lt;/li&gt;
&lt;/ol&gt;




&lt;h1&gt;
  
  
  LAB: Next step after your subnetting lab
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Step 1 — Keep the existing lab exactly as it is
&lt;/h2&gt;

&lt;p&gt;From your current file, the router has:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;enable
&lt;/span&gt;configure terminal

interface g0/0
ip address 192.168.1.1 255.255.255.0
no shutdown

interface g0/1
ip address 192.168.2.1 255.255.255.0
no shutdown
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And the PCs use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;192.168.1.x on left&lt;/li&gt;
&lt;li&gt;192.168.2.x on right&lt;/li&gt;
&lt;li&gt;correct gateways &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not change that yet.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2 — Assign roles to devices
&lt;/h2&gt;

&lt;p&gt;Use the devices you already have and rename them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Left side
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;PC0 = Client-1&lt;/li&gt;
&lt;li&gt;PC1 = Client-2&lt;/li&gt;
&lt;li&gt;PC2 = Monitoring-Node&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Right side
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;PC3 = App-Server&lt;/li&gt;
&lt;li&gt;PC4 = DB-Server&lt;/li&gt;
&lt;li&gt;PC5 = Backup-Server&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is still Packet Tracer, but now you are thinking like operations.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3 — Verify baseline connectivity
&lt;/h2&gt;

&lt;p&gt;From Client-1, test:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping 192.168.1.11
ping 192.168.2.10
ping 192.168.2.11
ping 192.168.2.12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  What this teaches
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;same subnet traffic uses switch&lt;/li&gt;
&lt;li&gt;different subnet traffic uses router&lt;/li&gt;
&lt;li&gt;baseline must be healthy before security or monitoring changes&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  SRE meaning
&lt;/h3&gt;

&lt;p&gt;Before making changes, first confirm:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what is working&lt;/li&gt;
&lt;li&gt;what is reachable&lt;/li&gt;
&lt;li&gt;what “healthy” looks like&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is exactly how incident response starts.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4 — Make one machine the “monitoring node”
&lt;/h2&gt;

&lt;p&gt;Use PC2 as a monitoring machine.&lt;/p&gt;

&lt;p&gt;From PC2, ping all service IPs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping 192.168.2.10
ping 192.168.2.11
ping 192.168.2.12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  What this represents
&lt;/h3&gt;

&lt;p&gt;This is basic service health checking.&lt;/p&gt;

&lt;h3&gt;
  
  
  What an SRE learns here
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Monitoring is just repeated checking&lt;/li&gt;
&lt;li&gt;If a server stops answering, that is a signal&lt;/li&gt;
&lt;li&gt;You need one trusted point that checks services regularly&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  In real life
&lt;/h3&gt;

&lt;p&gt;This becomes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;blackbox monitoring&lt;/li&gt;
&lt;li&gt;ICMP checks&lt;/li&gt;
&lt;li&gt;TCP checks&lt;/li&gt;
&lt;li&gt;HTTP health endpoints&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step 5 — Add controlled access with ACL
&lt;/h2&gt;

&lt;p&gt;Now we simulate a real policy:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Clients can access App-Server, but should not access DB-Server directly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is very important for SRE and production design.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example rule
&lt;/h3&gt;

&lt;p&gt;Allow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;192.168.1.0/24 → App-Server (192.168.2.10)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Deny:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;192.168.1.0/24 → DB-Server (192.168.2.11)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Router config
&lt;/h3&gt;

&lt;p&gt;On the router:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;enable
&lt;/span&gt;configure terminal

access-list 101 permit icmp 192.168.1.0 0.0.0.255 host 192.168.2.10
access-list 101 deny icmp 192.168.1.0 0.0.0.255 host 192.168.2.11
access-list 101 permit ip any any

interface g0/0
ip access-group 101 &lt;span class="k"&gt;in&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  What this means
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;clients may ping app server&lt;/li&gt;
&lt;li&gt;clients may not ping DB server directly&lt;/li&gt;
&lt;li&gt;everything else is allowed after that&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why this matters for SRE
&lt;/h3&gt;

&lt;p&gt;An SRE thinks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;not every machine should reach every machine&lt;/li&gt;
&lt;li&gt;databases should be protected&lt;/li&gt;
&lt;li&gt;app tier and data tier should be separated&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step 6 — Test the policy
&lt;/h2&gt;

&lt;p&gt;From Client-1:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping 192.168.2.10
ping 192.168.2.11
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Expected
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;ping to 192.168.2.10 should work&lt;/li&gt;
&lt;li&gt;ping to 192.168.2.11 should fail&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What this teaches
&lt;/h3&gt;

&lt;p&gt;Security is part of reliability.&lt;/p&gt;

&lt;p&gt;Why? Because secure boundaries reduce:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;accidental damage&lt;/li&gt;
&lt;li&gt;attack spread&lt;/li&gt;
&lt;li&gt;wrong connections&lt;/li&gt;
&lt;li&gt;noisy failures&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step 7 — Keep monitoring node more privileged
&lt;/h2&gt;

&lt;p&gt;You may decide the monitoring node should still check both servers.&lt;/p&gt;

&lt;p&gt;That teaches an important SRE concept:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Monitoring systems often need broader visibility than ordinary clients.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To simulate that, put the monitoring node in the allowed list.&lt;/p&gt;

&lt;p&gt;Example, if PC2 is 192.168.1.12:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;enable
&lt;/span&gt;configure terminal
no access-list 101

access-list 101 permit icmp host 192.168.1.12 host 192.168.2.10
access-list 101 permit icmp host 192.168.1.12 host 192.168.2.11
access-list 101 permit icmp 192.168.1.0 0.0.0.255 host 192.168.2.10
access-list 101 deny icmp 192.168.1.0 0.0.0.255 host 192.168.2.11
access-list 101 permit ip any any

interface g0/0
ip access-group 101 &lt;span class="k"&gt;in&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;production traffic rules and monitoring rules are not always identical&lt;/li&gt;
&lt;li&gt;observability often needs special access&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step 8 — Simulate a failure
&lt;/h2&gt;

&lt;p&gt;Now we test the system when something breaks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Option A: bring down service-side router interface
&lt;/h3&gt;

&lt;p&gt;On router:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;enable
&lt;/span&gt;configure terminal
interface g0/1
shutdown
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  What happens
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;all right-side services become unreachable&lt;/li&gt;
&lt;li&gt;monitoring checks fail&lt;/li&gt;
&lt;li&gt;client traffic fails&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  SRE lesson
&lt;/h3&gt;

&lt;p&gt;This simulates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;service subnet outage&lt;/li&gt;
&lt;li&gt;bad change&lt;/li&gt;
&lt;li&gt;interface failure&lt;/li&gt;
&lt;li&gt;network isolation incident&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What to observe
&lt;/h3&gt;

&lt;p&gt;From Monitoring-Node:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping 192.168.2.10
ping 192.168.2.11
ping 192.168.2.12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All should fail.&lt;/p&gt;

&lt;p&gt;Now restore:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;enable
&lt;/span&gt;configure terminal
interface g0/1
no shutdown
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a simple fail-and-recover drill.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 9 — Simulate partial failure
&lt;/h2&gt;

&lt;p&gt;Instead of taking down the whole subnet, disconnect one service cable or power off one server PC.&lt;/p&gt;

&lt;h3&gt;
  
  
  What happens
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;one target fails&lt;/li&gt;
&lt;li&gt;others stay healthy&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  SRE lesson
&lt;/h3&gt;

&lt;p&gt;Learn to distinguish:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;total outage&lt;/li&gt;
&lt;li&gt;partial outage&lt;/li&gt;
&lt;li&gt;isolated host issue&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is critical in troubleshooting.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 10 — Document expected behavior
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Test&lt;/th&gt;
&lt;th&gt;Expected result&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Client-1 to Client-2&lt;/td&gt;
&lt;td&gt;Success&lt;/td&gt;
&lt;td&gt;Same subnet&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Client-1 to App-Server&lt;/td&gt;
&lt;td&gt;Success&lt;/td&gt;
&lt;td&gt;Routed and allowed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Client-1 to DB-Server&lt;/td&gt;
&lt;td&gt;Fail&lt;/td&gt;
&lt;td&gt;Blocked by ACL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monitoring-Node to App-Server&lt;/td&gt;
&lt;td&gt;Success&lt;/td&gt;
&lt;td&gt;Monitoring allowed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monitoring-Node to DB-Server&lt;/td&gt;
&lt;td&gt;Success&lt;/td&gt;
&lt;td&gt;Monitoring allowed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;After G0/1 shutdown&lt;/td&gt;
&lt;td&gt;Fail&lt;/td&gt;
&lt;td&gt;Service subnet unavailable&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is how SREs think: define normal behavior before troubleshooting.&lt;/p&gt;




&lt;h1&gt;
  
  
  What this lab teaches about SRE work
&lt;/h1&gt;

&lt;h2&gt;
  
  
  1. Segmentation
&lt;/h2&gt;

&lt;p&gt;Not every host should talk to every host.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Access control
&lt;/h2&gt;

&lt;p&gt;Protect sensitive systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Monitoring
&lt;/h2&gt;

&lt;p&gt;Continuously check service availability.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Failure testing
&lt;/h2&gt;

&lt;p&gt;Break things on purpose and observe behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Troubleshooting
&lt;/h2&gt;

&lt;p&gt;Determine whether failure is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;network-wide&lt;/li&gt;
&lt;li&gt;subnet-wide&lt;/li&gt;
&lt;li&gt;service-specific&lt;/li&gt;
&lt;li&gt;policy-related&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. Reliability mindset
&lt;/h2&gt;

&lt;p&gt;A working network is not enough.&lt;br&gt;
You need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;visibility&lt;/li&gt;
&lt;li&gt;control&lt;/li&gt;
&lt;li&gt;predictable behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Stage 1 — Basic routing
&lt;/h2&gt;

&lt;p&gt;“Two networks communicate through a router.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 2 — Service roles
&lt;/h2&gt;

&lt;p&gt;“One subnet acts like users, the other acts like services.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 3 — Monitoring
&lt;/h2&gt;

&lt;p&gt;“One node continuously checks whether services are reachable.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 4 — ACL
&lt;/h2&gt;

&lt;p&gt;“Not everybody is allowed to talk to everything.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 5 — Failure drill
&lt;/h2&gt;

&lt;p&gt;“We intentionally break connectivity and confirm how the system behaves.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Stage 6 — Recovery
&lt;/h2&gt;

&lt;p&gt;“We restore service and confirm health again.”&lt;/p&gt;

&lt;p&gt;That sequence is much closer to real SRE practice.&lt;/p&gt;

&lt;h1&gt;
  
  
  Very simple SRE interview explanation
&lt;/h1&gt;

&lt;p&gt;You can say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I would start with a routed two-subnet lab, then extend it by assigning service roles, adding monitoring checks, implementing ACL-based access control, and simulating failures. This helps demonstrate core SRE thinking: segmentation, observability, controlled access, outage detection, and recovery validation.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>monitoring</category>
      <category>networking</category>
      <category>sre</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>LAB: Subnetting with Router (2 Networks)</title>
      <dc:creator>Aisalkyn Aidarova</dc:creator>
      <pubDate>Fri, 17 Apr 2026 03:34:19 +0000</pubDate>
      <link>https://forem.com/jumptotech/lab-subnetting-with-router-2-networks-1kde</link>
      <guid>https://forem.com/jumptotech/lab-subnetting-with-router-2-networks-1kde</guid>
      <description>&lt;h1&gt;
  
  
  🧠 PART 1 — WHAT YOU BUILT
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;LEFT side → Switch + PCs → &lt;strong&gt;Subnet 1&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;RIGHT side → Switch + PCs → &lt;strong&gt;Subnet 2&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Middle → Router → connects them&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 This is &lt;strong&gt;real-world design&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  🧠 PART 2 — WHY SUBNETTING IS IMPORTANT
&lt;/h1&gt;

&lt;h3&gt;
  
  
  ❌ Without subnetting (one big network)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Too many devices&lt;/li&gt;
&lt;li&gt;Broadcast storms&lt;/li&gt;
&lt;li&gt;Slow network&lt;/li&gt;
&lt;li&gt;No security separation&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  ✅ With subnetting
&lt;/h3&gt;

&lt;p&gt;You create &lt;strong&gt;smaller networks (subnets)&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benefit&lt;/th&gt;
&lt;th&gt;Explanation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Performance&lt;/td&gt;
&lt;td&gt;Less broadcast traffic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;Can control access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Organization&lt;/td&gt;
&lt;td&gt;HR, IT, Finance separated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scalability&lt;/td&gt;
&lt;td&gt;Easy to grow&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;👉 Example (your lab):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Subnet 1 = Office A&lt;/li&gt;
&lt;li&gt;Subnet 2 = Office B&lt;/li&gt;
&lt;li&gt;Router = gate between them&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🧠 PART 3 — SUBNET DESIGN (VERY IMPORTANT)
&lt;/h1&gt;

&lt;p&gt;We define:&lt;/p&gt;

&lt;h3&gt;
  
  
  Subnet 1 (LEFT)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Network: 192.168.1.0/24
Gateway: 192.168.1.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Subnet 2 (RIGHT)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Network: 192.168.2.0/24
Gateway: 192.168.2.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  💡 Explain &lt;code&gt;/24&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;2^8 = 256&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;8 bits for hosts&lt;/li&gt;
&lt;li&gt;256 IP addresses total&lt;/li&gt;
&lt;li&gt;254 usable&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🧠 PART 4 — CONFIGURATION (STEP-BY-STEP)
&lt;/h1&gt;

&lt;h2&gt;
  
  
  🔹 1. Configure Router
&lt;/h2&gt;

&lt;p&gt;Open Router CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cisco_ios"&gt;&lt;code&gt;&lt;span class="k"&gt;enable&lt;/span&gt;
&lt;span class="k"&gt;configure&lt;/span&gt; terminal

&lt;span class="kt"&gt;interface&lt;/span&gt;&lt;span class="nf"&gt; g0/0&lt;/span&gt;
&lt;span class="k"&gt;ip&lt;/span&gt; address &lt;span class="m"&gt;192.168.1.1&lt;/span&gt; &lt;span class="m"&gt;255.255.255.0&lt;/span&gt;
&lt;span class="kc"&gt;no &lt;/span&gt;&lt;span class="k"&gt;shutdown&lt;/span&gt;

&lt;span class="kt"&gt;interface&lt;/span&gt;&lt;span class="nf"&gt; g0/1&lt;/span&gt;
&lt;span class="k"&gt;ip&lt;/span&gt; address &lt;span class="m"&gt;192.168.2.1&lt;/span&gt; &lt;span class="m"&gt;255.255.255.0&lt;/span&gt;
&lt;span class="kc"&gt;no &lt;/span&gt;&lt;span class="k"&gt;shutdown&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔹 2. Configure PCs (VERY IMPORTANT)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  LEFT PCs
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;PC&lt;/th&gt;
&lt;th&gt;IP&lt;/th&gt;
&lt;th&gt;Gateway&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PC0&lt;/td&gt;
&lt;td&gt;192.168.1.10&lt;/td&gt;
&lt;td&gt;192.168.1.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PC1&lt;/td&gt;
&lt;td&gt;192.168.1.11&lt;/td&gt;
&lt;td&gt;192.168.1.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PC2&lt;/td&gt;
&lt;td&gt;192.168.1.12&lt;/td&gt;
&lt;td&gt;192.168.1.1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  RIGHT PCs
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;PC&lt;/th&gt;
&lt;th&gt;IP&lt;/th&gt;
&lt;th&gt;Gateway&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PC3&lt;/td&gt;
&lt;td&gt;192.168.2.10&lt;/td&gt;
&lt;td&gt;192.168.2.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PC4&lt;/td&gt;
&lt;td&gt;192.168.2.11&lt;/td&gt;
&lt;td&gt;192.168.2.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PC5&lt;/td&gt;
&lt;td&gt;192.168.2.12&lt;/td&gt;
&lt;td&gt;192.168.2.1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h1&gt;
  
  
  🧠 PART 5 — HOW IT WORKS (CRITICAL)
&lt;/h1&gt;

&lt;h2&gt;
  
  
  🔁 Same Subnet Communication
&lt;/h2&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PC0 → PC1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✔ Goes through &lt;strong&gt;switch only&lt;/strong&gt;&lt;br&gt;
❌ Router NOT used&lt;/p&gt;


&lt;h2&gt;
  
  
  🌍 Different Subnet Communication
&lt;/h2&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PC0 → PC3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;PC0 sees → destination is different subnet&lt;/li&gt;
&lt;li&gt;Sends packet to &lt;strong&gt;default gateway (router)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Router checks routing table&lt;/li&gt;
&lt;li&gt;Router forwards to subnet 2&lt;/li&gt;
&lt;li&gt;PC3 receives&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;👉 THIS is the key concept:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Router = device that connects different networks&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  🧠 PART 6 — TESTING
&lt;/h1&gt;

&lt;h2&gt;
  
  
  🔹 Test same subnet
&lt;/h2&gt;

&lt;p&gt;From PC0:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;ping 192.168.1.11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✔ Should work&lt;/p&gt;




&lt;h2&gt;
  
  
  🔹 Test different subnet
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;ping 192.168.2.10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✔ Should work &lt;strong&gt;only if router configured correctly&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  🧠 PART 7 — WHAT HAPPENS IF NO ROUTER?
&lt;/h1&gt;

&lt;p&gt;👉 “What if router is removed?”&lt;/p&gt;

&lt;p&gt;Answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PC0 cannot reach PC3&lt;/li&gt;
&lt;li&gt;Because different networks need routing&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🧠 PART 8 — INTERVIEW LEVEL EXPLANATION
&lt;/h1&gt;

&lt;p&gt;You can say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Subnetting divides a large network into smaller logical networks to improve performance, security, and manageability. Devices within the same subnet communicate directly via Layer 2, while communication between subnets requires a Layer 3 device like a router.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  🧪 BONUS TASK
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Change subnet mask to &lt;code&gt;/25&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Create &lt;strong&gt;4 subnets&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Assign new IPs&lt;/li&gt;
&lt;li&gt;Test connectivity&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  🧠 WHAT IS BROADCASTING?
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Broadcast = one device sends data to ALL devices in the network&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🔁 Example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PC1 → ALL PCs in same network
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📦 Real case (VERY IMPORTANT)
&lt;/h2&gt;

&lt;p&gt;When PC1 doesn’t know MAC address:&lt;/p&gt;

&lt;p&gt;It sends:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Who has 192.168.1.20?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;👉 This is &lt;strong&gt;ARP broadcast&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🔹 What happens
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Switch receives frame&lt;/li&gt;
&lt;li&gt;Sends it to &lt;strong&gt;ALL ports (same VLAN only)&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💡 Key rule
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Broadcast stays inside the same subnet / VLAN&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🔥 In your lab
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;VLAN 10 → broadcast stays inside VLAN 10&lt;/li&gt;
&lt;li&gt;VLAN 20 → separate broadcast domain&lt;/li&gt;
&lt;/ul&gt;







&lt;h1&gt;
  
  
  🧠 WHAT IS MULTICASTING?
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Multicast = one device sends data to a specific GROUP of devices&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🔁 Example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Server → Only interested clients
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📦 Real examples
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Video streaming&lt;/li&gt;
&lt;li&gt;Online classes&lt;/li&gt;
&lt;li&gt;Stock market feeds&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;👉 Not everyone receives it — only subscribers&lt;/p&gt;




&lt;h2&gt;
  
  
  🔹 IP Range for Multicast
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;224.0.0.0 – 239.255.255.255
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;









&lt;h1&gt;
  
  
  🧠 WHAT IS UNICAST (IMPORTANT TOO)
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Unicast = one-to-one communication&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🔁 Example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PC1 → PC2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✔ Most common&lt;br&gt;
✔ Used in ping, web traffic, SSH&lt;/p&gt;




&lt;h1&gt;
  
  
  ⚖️ DIFFERENCE (VERY CLEAR)
&lt;/h1&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unicast&lt;/td&gt;
&lt;td&gt;1 → 1&lt;/td&gt;
&lt;td&gt;PC → Server&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Broadcast&lt;/td&gt;
&lt;td&gt;1 → ALL&lt;/td&gt;
&lt;td&gt;ARP request&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multicast&lt;/td&gt;
&lt;td&gt;1 → Group&lt;/td&gt;
&lt;td&gt;Streaming&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h1&gt;
  
  
  🧠 SIMPLE ANALOGY
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Unicast → Phone call&lt;/li&gt;
&lt;li&gt;Broadcast → Shouting in a room&lt;/li&gt;
&lt;li&gt;Multicast → Talking to a group in a meeting&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🔥 WHY BROADCAST IS IMPORTANT (AND DANGEROUS)
&lt;/h1&gt;
&lt;h2&gt;
  
  
  ✅ Needed for:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;ARP&lt;/li&gt;
&lt;li&gt;DHCP discovery&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  ❌ Problem:
&lt;/h2&gt;

&lt;p&gt;Too many broadcasts =&lt;/p&gt;

&lt;p&gt;👉 Network slowdown&lt;br&gt;
👉 CPU overload&lt;br&gt;
👉 “Broadcast storm”&lt;/p&gt;




&lt;h1&gt;
  
  
  🧠 HOW VLAN HELPS
&lt;/h1&gt;

&lt;p&gt;👉 VLAN reduces broadcast&lt;/p&gt;

&lt;p&gt;Instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1 big network → 1000 devices receive broadcast
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You get:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;VLAN 10 → 100 devices
VLAN 20 → 100 devices
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✔ Faster&lt;br&gt;
✔ Cleaner&lt;/p&gt;




&lt;h1&gt;
  
  
  🧠 HOW ROUTER HANDLES IT
&lt;/h1&gt;

&lt;p&gt;👉 Router &lt;strong&gt;does NOT forward broadcast&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;Example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PC in VLAN10 sends broadcast
❌ Router blocks it
✔ VLAN20 never receives it&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🧠 MULTICAST IN REAL NETWORKS
&lt;/h1&gt;

&lt;p&gt;Used when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You don’t want broadcast (too heavy)&lt;/li&gt;
&lt;li&gt;You don’t want multiple unicast (too expensive)&lt;/li&gt;
&lt;/ul&gt;



&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;Instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Server → 100 users (100 separate streams)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Multicast:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Server → 1 stream → group receives
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✔ Efficient&lt;/p&gt;







&lt;h1&gt;
  
  
  🔥 INTERVIEW ANSWER (SHORT)
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Broadcast is one-to-all communication within a subnet or VLAN and is used for operations like ARP. Multicast is one-to-many communication where data is sent only to a specific group of devices. Unlike broadcast, multicast is more efficient because it avoids sending data to unnecessary devices.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  In your Packet Tracer:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;ARP request = broadcast&lt;/li&gt;
&lt;li&gt;Ping = unicast&lt;/li&gt;
&lt;li&gt;VLAN = controls broadcast domain&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  🔥 FINAL LINE (MEMORIZE)
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Broadcast sends data to all devices in a network, multicast sends data to a selected group, and unicast sends data to a single device.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  🧠 PART 1 — HOW COMMUNICATION REALLY WORKS
&lt;/h1&gt;




&lt;h2&gt;
  
  
  🔹 1. SAME NETWORK (NO VLAN)
&lt;/h2&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PC1 (192.168.1.10) → PC2 (192.168.1.20)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  What happens step-by-step:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;PC1 checks:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;“Is 192.168.1.20 in my network?”
 ✔ YES&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;PC1 sends ARP:&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;“Who has 192.168.1.20?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;Switch:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Broadcasts to all ports&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;PC2 replies with MAC&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Switch learns:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;MAC → Port mapping (MAC table)&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Data flows directly&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;👉 Key:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uses &lt;strong&gt;MAC address&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Switch works at &lt;strong&gt;Layer 2&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Router NOT used&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🧠 2. DIFFERENT NETWORK (SUBNET)
&lt;/h1&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PC1 (192.168.1.10) → PC3 (192.168.2.10)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  What happens:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;PC1 checks:&lt;br&gt;
❌ “Different network”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PC1 sends packet to:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Default Gateway (Router)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Router:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Removes Layer 2 frame&lt;/li&gt;
&lt;li&gt;Checks IP (Layer 3)&lt;/li&gt;
&lt;li&gt;Decides where to send&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Router forwards to subnet 2&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;👉 Key:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uses &lt;strong&gt;IP address&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Router is required&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🧠 3. VLAN (WHY SWITCH BLOCKS)
&lt;/h1&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PC1 → VLAN 10&lt;/li&gt;
&lt;li&gt;PC2 → VLAN 20&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  What happens:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;PC1 sends ARP&lt;/li&gt;
&lt;li&gt;Switch checks VLAN&lt;/li&gt;
&lt;li&gt;❌ Does NOT forward to VLAN 20&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;👉 VLAN = &lt;strong&gt;separate broadcast domain&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  🧠 FINAL RULE (MEMORIZE)
&lt;/h1&gt;

&lt;p&gt;👉 Same VLAN → Switch&lt;br&gt;
👉 Different VLAN → Router&lt;/p&gt;


&lt;h1&gt;
  
  
  🚀 PART 2 — FULL LAB (USING YOUR TOPOLOGY)
&lt;/h1&gt;


&lt;h1&gt;
  
  
  🎯 Goal
&lt;/h1&gt;

&lt;p&gt;You will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create VLANs&lt;/li&gt;
&lt;li&gt;Assign ports&lt;/li&gt;
&lt;li&gt;Configure trunk&lt;/li&gt;
&lt;li&gt;Configure router (inter-VLAN routing)&lt;/li&gt;
&lt;li&gt;Enable DHCP&lt;/li&gt;
&lt;li&gt;Add ACL security&lt;/li&gt;
&lt;li&gt;Test everything&lt;/li&gt;
&lt;/ul&gt;


&lt;h1&gt;
  
  
  🧪 STEP 1 — VERIFY TOPOLOGY
&lt;/h1&gt;

&lt;p&gt;You already have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PCs ✔&lt;/li&gt;
&lt;li&gt;Switch ✔&lt;/li&gt;
&lt;li&gt;Router ✔&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Make sure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PCs connected to switch&lt;/li&gt;
&lt;li&gt;Switch connected to router&lt;/li&gt;
&lt;/ul&gt;


&lt;h1&gt;
  
  
  🧪 STEP 2 — SWITCH CONFIGURATION
&lt;/h1&gt;

&lt;p&gt;Click Switch → CLI:&lt;/p&gt;


&lt;h2&gt;
  
  
  🔹 Enter config mode
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;enable
&lt;/span&gt;configure terminal
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔹 Create VLANs
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vlan 10
name HR

vlan 20
name IT
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔹 Assign Ports
&lt;/h2&gt;

&lt;p&gt;Example (adjust to your ports):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;interface fa0/1
switchport mode access
switchport access vlan 10

interface fa0/2
switchport mode access
switchport access vlan 10

interface fa0/3
switchport mode access
switchport access vlan 20

interface fa0/4
switchport mode access
switchport access vlan 20
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔹 Configure Trunk (IMPORTANT)
&lt;/h2&gt;

&lt;p&gt;Port connected to router:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;interface fa0/24
switchport mode trunk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🧪 STEP 3 — ROUTER CONFIGURATION
&lt;/h1&gt;

&lt;p&gt;Click Router → CLI:&lt;/p&gt;




&lt;h2&gt;
  
  
  🔹 Enter config
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;enable
&lt;/span&gt;configure terminal
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔹 Router-on-a-Stick
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;interface g0/0.10
encapsulation dot1Q 10
ip address 192.168.10.1 255.255.255.0

interface g0/0.20
encapsulation dot1Q 20
ip address 192.168.20.1 255.255.255.0

interface g0/0
no shutdown
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;👉 This allows router to handle VLANs&lt;/p&gt;




&lt;h1&gt;
  
  
  🧪 STEP 4 — DHCP CONFIG
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip dhcp pool HR
network 192.168.10.0 255.255.255.0
default-router 192.168.10.1

ip dhcp pool IT
network 192.168.20.0 255.255.255.0
default-router 192.168.20.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔹 On PCs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Click PC&lt;/li&gt;
&lt;li&gt;Desktop → IP Configuration&lt;/li&gt;
&lt;li&gt;Select DHCP&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🧪 STEP 5 — ACL (SECURITY)
&lt;/h1&gt;

&lt;h2&gt;
  
  
  🎯 Block HR → IT
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;access-list 100 deny ip 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255
access-list 100 permit ip any any
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔹 Apply ACL
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;interface g0/0.10
ip access-group 100 &lt;span class="k"&gt;in&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🧪 STEP 6 — TESTING
&lt;/h1&gt;




&lt;h2&gt;
  
  
  ✅ SAME VLAN
&lt;/h2&gt;

&lt;p&gt;From VLAN10 PC:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping 192.168.10.X
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✔ Should work&lt;/p&gt;




&lt;h2&gt;
  
  
  ❌ BLOCKED
&lt;/h2&gt;

&lt;p&gt;From VLAN10:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping 192.168.20.X
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;❌ Should fail&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ ALLOWED
&lt;/h2&gt;

&lt;p&gt;From VLAN20:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping 192.168.10.X
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✔ Should work&lt;/p&gt;




&lt;h1&gt;
  
  
  🧠 PART 3 — WHAT STUDENTS MUST UNDERSTAND
&lt;/h1&gt;




&lt;h2&gt;
  
  
  🔹 Switch Role
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Forwards based on MAC&lt;/li&gt;
&lt;li&gt;Works inside VLAN only&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔹 VLAN Role
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Separates Layer 2 traffic&lt;/li&gt;
&lt;li&gt;Creates isolated networks&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔹 Subnet Role
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Defines IP structure&lt;/li&gt;
&lt;li&gt;Enables routing&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔹 Router Role
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Connects networks&lt;/li&gt;
&lt;li&gt;Routes packets&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔹 DHCP Role
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Assigns IP automatically&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔹 ACL Role
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Controls traffic (security)&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🔥 FINAL INTERVIEW ANSWER
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Devices in the same VLAN communicate directly using Layer 2 switching. When devices are in different VLANs or subnets, communication requires a Layer 3 device such as a router. VLANs provide logical segmentation, subnetting provides IP structure, and routing enables communication between networks.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
    </item>
    <item>
      <title>Sizes in Computers (VERY IMPORTANT FOUNDATION)</title>
      <dc:creator>Aisalkyn Aidarova</dc:creator>
      <pubDate>Thu, 16 Apr 2026 03:36:12 +0000</pubDate>
      <link>https://forem.com/jumptotech/sizes-in-computers-very-important-foundation-5d1f</link>
      <guid>https://forem.com/jumptotech/sizes-in-computers-very-important-foundation-5d1f</guid>
      <description>&lt;p&gt;P&lt;/p&gt;

&lt;h1&gt;
  
  
  NUMBER SYSTEMS &amp;amp; HEX ↔ DECIMAL
&lt;/h1&gt;

&lt;p&gt;number systems and specifically how to convert between hexadecimal and decimal.&lt;/p&gt;

&lt;p&gt;In computing and networking, we use different types of number systems. A number system is simply a way to represent numbers.&lt;/p&gt;

&lt;p&gt;In everyday life, we use the decimal system, which is base 10. That means it uses digits from 0 to 9.&lt;/p&gt;

&lt;p&gt;In computing, there are three other very important number systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Binary (base 2)&lt;/li&gt;
&lt;li&gt;Octal (base 8)&lt;/li&gt;
&lt;li&gt;Hexadecimal (base 16)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hexadecimal is a positional number system with base 16. It uses 16 symbols:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;0 to 9&lt;/li&gt;
&lt;li&gt;A, B, C, D, E, F&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The letters represent values:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```text id="hexmap"&lt;br&gt;
A = 10&lt;br&gt;
B = 11&lt;br&gt;
C = 12&lt;br&gt;
D = 13&lt;br&gt;
E = 14&lt;br&gt;
F = 15&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;




Each position in a hexadecimal number represents a power of 16.

For example, a two-digit hex number has positions:



```text id="pos16"
16^1   16^0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h1&gt;
  
  
  🧪 EXAMPLE 1 — HEX → DECIMAL
&lt;/h1&gt;

&lt;p&gt;Convert B6 to decimal.&lt;/p&gt;

&lt;p&gt;Step 1: Write positional values.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```text id="ex1pos"&lt;br&gt;
B   6&lt;br&gt;
16^1 16^0&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


Step 2: Convert hex to decimal.



```text id="ex1conv"
B = 11
6 = 6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Step 3: Multiply by powers.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```text id="ex1math"&lt;br&gt;
11 × 16 = 176&lt;br&gt;
6 × 1 = 6&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


Step 4: Add results.



```text id="ex1sum"
176 + 6 = 182
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;So, B6 in hexadecimal equals 182 in decimal.&lt;/p&gt;


&lt;h1&gt;
  
  
  🧪 EXAMPLE 2 — HEX → DECIMAL
&lt;/h1&gt;

&lt;p&gt;Convert A59C to decimal.&lt;/p&gt;

&lt;p&gt;Step 1: Positions:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```text id="ex2pos"&lt;br&gt;
A   5   9   C&lt;br&gt;
16^3 16^2 16^1 16^0&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


Step 2: Convert values:



```text id="ex2conv"
A = 10
5 = 5
9 = 9
C = 12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Step 3: Multiply:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```text id="ex2math"&lt;br&gt;
10 × 16^3 = 40960&lt;br&gt;
5 × 16^2 = 1280&lt;br&gt;
9 × 16 = 144&lt;br&gt;
12 × 1 = 12&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


Step 4: Add:



```text id="ex2sum"
40960 + 1280 + 144 + 12 = 42396
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;So, A59C equals 42396 in decimal.&lt;/p&gt;


&lt;h1&gt;
  
  
  🔁 DECIMAL → HEXADECIMAL
&lt;/h1&gt;

&lt;p&gt;Now we do the reverse.&lt;/p&gt;

&lt;p&gt;We convert decimal to hexadecimal using &lt;strong&gt;division by 16&lt;/strong&gt;.&lt;/p&gt;


&lt;h1&gt;
  
  
  🧪 EXAMPLE 3 — DECIMAL → HEX
&lt;/h1&gt;

&lt;p&gt;Convert 256 to hexadecimal.&lt;/p&gt;

&lt;p&gt;Step-by-step:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```text id="ex3steps"&lt;br&gt;
256 ÷ 16 = 16 remainder 0&lt;br&gt;
16 ÷ 16 = 1 remainder 0&lt;br&gt;
1 ÷ 16 = 0 remainder 1&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


Now write remainders from bottom to top:



```text id="ex3result"
100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;So:&lt;/p&gt;

&lt;p&gt;256 = 100 (hex)&lt;/p&gt;


&lt;h1&gt;
  
  
  🧪 EXAMPLE 4 — DECIMAL → HEX
&lt;/h1&gt;

&lt;p&gt;Convert 7562 to hexadecimal.&lt;/p&gt;

&lt;p&gt;Step-by-step:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```text id="ex4steps"&lt;br&gt;
7562 ÷ 16 = 472 remainder 10&lt;br&gt;
472 ÷ 16 = 29 remainder 8&lt;br&gt;
29 ÷ 16 = 1 remainder 13&lt;br&gt;
1 ÷ 16 = 0 remainder 1&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


Convert remainders:



```text id="ex4conv"
10 = A
8 = 8
13 = D
1 = 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Write bottom to top:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```text id="ex4result"&lt;br&gt;
1D8A&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


So:

7562 = 1D8A (hex)

---

# 🧠 IMPORTANT RULES

### Hex → Decimal

👉 Multiply each digit by powers of 16 and add

### Decimal → Hex

👉 Divide by 16 repeatedly and collect remainders



“Hexadecimal is base 16, which means each position represents powers of 16. To convert from hex to decimal, we multiply each digit by its positional value and add the results. To convert from decimal to hex, we repeatedly divide by 16 and track the remainders.”

---

# 🧠 WHY THIS IS IMPORTANT (NETWORKING)

In networking:

* MAC addresses use hexadecimal
* IPv6 uses hexadecimal
* Memory addresses use hexadecimal

---

# 💻 PRACTICE 

### Convert to decimal:



```text id="practice1"
1A
2F
FF
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Convert to hex:
&lt;/h3&gt;



&lt;p&gt;```text id="practice2"&lt;br&gt;
100&lt;br&gt;
500&lt;br&gt;
1024&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


---

# 🚀 INTERVIEW ANSWER

“Hexadecimal is a base-16 number system commonly used in computing. Conversion from hex to decimal involves multiplying digits by powers of 16, while conversion from decimal to hex uses repeated division by 16.”

---

# 🎯 FINAL SUMMARY

* Decimal = base 10
* Hex = base 16
* Hex uses 0–9 and A–F
* Use multiplication for hex → decimal
* Use division for decimal → hex





Everything in networking is based on **bits → bytes → IP**

---

## What is a BIT?

👉 A **bit** is the smallest unit of data



```text
bit = 0 or 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;0 = OFF&lt;/li&gt;
&lt;li&gt;1 = ON&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  What is a BYTE?
&lt;/h2&gt;

&lt;p&gt;👉 A &lt;strong&gt;byte = 8 bits&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1 byte = 8 bits
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;10101010  → 1 byte
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  What is an OCTET?
&lt;/h2&gt;

&lt;p&gt;👉 An &lt;strong&gt;octet = 8 bits (same as byte)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In networking, we say:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;byte&lt;/strong&gt; → general computing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;octet&lt;/strong&gt; → networking (IP addresses)&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🎯 KEY IDEA
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1 octet = 8 bits = numbers from 0 to 255
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🎓 2. Why 0–255?
&lt;/h1&gt;

&lt;p&gt;Because:&lt;/p&gt;

&lt;p&gt;2^8 = 256&lt;/p&gt;

&lt;p&gt;👉 So:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0 to 255 = 256 values
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🎓 3. Structure of IP Address
&lt;/h1&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This has &lt;strong&gt;4 octets&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[192] [168] [1] [10]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each one = &lt;strong&gt;8 bits&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Total:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;4 × 8 = 32 bits
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🎓 4. The “BOX METHOD” (This is what you asked)
&lt;/h1&gt;

&lt;p&gt;This is how you convert numbers like &lt;strong&gt;192 into bits&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1 — Draw boxes
&lt;/h2&gt;

&lt;p&gt;Each octet has &lt;strong&gt;8 boxes (bits)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;128  64  32  16  8  4  2  1
[  ] [  ] [  ] [  ] [ ] [ ] [ ] [ ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 These numbers are powers of 2&lt;/p&gt;




&lt;h1&gt;
  
  
  🎓 5. Example: Convert 192
&lt;/h1&gt;

&lt;p&gt;We need to make &lt;strong&gt;192 using these numbers&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Step-by-step:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192 - 128 = 64 → use 128 → put 1
64 - 64 = 0   → use 64  → put 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Remaining = 0 → rest are 0&lt;/p&gt;




&lt;h2&gt;
  
  
  Final boxes:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;128  64  32  16  8  4  2  1
 1    1   0   0   0  0  0  0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Final answer:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192 = 11000000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🎓 6. Example: Convert 168
&lt;/h1&gt;




&lt;h2&gt;
  
  
  Step-by-step:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;168 - 128 = 40 → 1
40 - 32 = 8   → 1
8 - 8 = 0     → 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Boxes:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;128  64  32  16  8  4  2  1
 1    0   1   0   1  0  0  0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Final:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;168 = 10101000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🎓 7. Example: Convert 1
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;00000001
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🎓 8. Example: Convert 0
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;00000000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🎓 9. Full IP in Binary
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.10 =
11000000.10101000.00000001.00001010
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🎓 10. VERY SIMPLE MEMORY TRICK
&lt;/h1&gt;

&lt;p&gt;👉 Think:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Big numbers → left side
Small numbers → right side
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🎓 11. Shortcut Table (Memorize This)
&lt;/h1&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Decimal&lt;/th&gt;
&lt;th&gt;Binary&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;128&lt;/td&gt;
&lt;td&gt;10000000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192&lt;/td&gt;
&lt;td&gt;11000000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;224&lt;/td&gt;
&lt;td&gt;11100000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;240&lt;/td&gt;
&lt;td&gt;11110000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;248&lt;/td&gt;
&lt;td&gt;11111000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;252&lt;/td&gt;
&lt;td&gt;11111100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;255&lt;/td&gt;
&lt;td&gt;11111111&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;👉 These are used in subnet masks&lt;/p&gt;




&lt;h1&gt;
  
  
  🎓 12. Why This Matters
&lt;/h1&gt;

&lt;p&gt;You need this to understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;subnet mask&lt;/li&gt;
&lt;li&gt;network vs host&lt;/li&gt;
&lt;li&gt;AWS VPC&lt;/li&gt;
&lt;li&gt;CIDR&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🎓 FINAL SUMMARY
&lt;/h1&gt;

&lt;p&gt;👉 bit = 0 or 1&lt;br&gt;
👉 8 bits = 1 byte = 1 octet&lt;br&gt;
👉 octet = 0–255&lt;br&gt;
👉 IP = 4 octets = 32 bits&lt;br&gt;
👉 boxes = powers of 2&lt;br&gt;
👉 fill with 1s to reach number&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>computerscience</category>
      <category>networking</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>SUBNET MASK (STRUCTURED + WITH CODE EXAMPLES), how a computer communicates in a network</title>
      <dc:creator>Aisalkyn Aidarova</dc:creator>
      <pubDate>Thu, 16 Apr 2026 03:29:46 +0000</pubDate>
      <link>https://forem.com/jumptotech/subnet-mask-structured-with-code-examples-50lj</link>
      <guid>https://forem.com/jumptotech/subnet-mask-structured-with-code-examples-50lj</guid>
      <description>&lt;p&gt;How a computer communicates locally and remotely, what information is required, and what networking devices are involved in these processes.&lt;/p&gt;

&lt;p&gt;First, let us understand what information a computer must have in order to function properly in a TCP/IP network.&lt;/p&gt;

&lt;p&gt;Every computer needs four key pieces of information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MAC address&lt;/li&gt;
&lt;li&gt;IP address&lt;/li&gt;
&lt;li&gt;Subnet mask&lt;/li&gt;
&lt;li&gt;Default gateway&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The MAC address is the physical address of the device. It is a 48-bit hexadecimal number and uniquely identifies a network interface on the local network.&lt;/p&gt;

&lt;p&gt;The IP address is the logical address used to identify the device on a network. This is what allows devices to communicate across networks.&lt;/p&gt;

&lt;p&gt;The subnet mask is used to determine whether another device is in the same network or a different network. This is one of the most important concepts in networking.&lt;/p&gt;

&lt;p&gt;The default gateway is the IP address of the router that is responsible for forwarding traffic outside the local network.&lt;/p&gt;

&lt;p&gt;Now the question is: when does a computer use each of these?&lt;/p&gt;

&lt;p&gt;To understand this, let us look at a scenario.&lt;/p&gt;

&lt;p&gt;We have one computer, which we will call Computer A. Computer A wants to communicate with two other devices:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Computer B (inside the same network)&lt;/li&gt;
&lt;li&gt;Computer C (outside the network, possibly on the internet)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first thing Computer A does is use the subnet mask.&lt;/p&gt;

&lt;p&gt;The subnet mask helps Computer A answer a very important question:&lt;/p&gt;

&lt;p&gt;Is the destination in the same network or a different network?&lt;/p&gt;

&lt;p&gt;If the answer is yes, meaning the destination is in the same network, then the communication is local.&lt;/p&gt;

&lt;p&gt;If the answer is no, meaning the destination is in a different network, then the communication is remote.&lt;/p&gt;

&lt;p&gt;Let us first look at local communication.&lt;/p&gt;

&lt;p&gt;When Computer A determines that Computer B is in the same network, it does not use the router. Instead, it communicates directly through a switch.&lt;/p&gt;

&lt;p&gt;However, to communicate, Computer A needs the MAC address of Computer B.&lt;/p&gt;

&lt;p&gt;So the process is as follows:&lt;/p&gt;

&lt;p&gt;First, Computer A sends an ARP request. ARP stands for Address Resolution Protocol. It is used to find the MAC address of a device using its IP address.&lt;/p&gt;

&lt;p&gt;The ARP request is basically asking:&lt;/p&gt;

&lt;p&gt;“Who has this IP address?”&lt;/p&gt;

&lt;p&gt;Then Computer B responds with its MAC address.&lt;/p&gt;

&lt;p&gt;After that, Computer A uses this MAC address to create a frame and sends data directly to Computer B.&lt;/p&gt;

&lt;p&gt;This communication happens through a switch, which is a Layer 2 device.&lt;/p&gt;

&lt;p&gt;In this situation, the default gateway is not used at all.&lt;/p&gt;

&lt;p&gt;Now let us look at remote communication.&lt;/p&gt;

&lt;p&gt;When Computer A determines that Computer C is not in the same network, it cannot send data directly.&lt;/p&gt;

&lt;p&gt;Instead, it must send the data to the default gateway.&lt;/p&gt;

&lt;p&gt;The default gateway is a router, which is a Layer 3 device.&lt;/p&gt;

&lt;p&gt;The process is similar at the beginning.&lt;/p&gt;

&lt;p&gt;Computer A uses ARP again, but this time it is not asking for Computer C’s MAC address.&lt;/p&gt;

&lt;p&gt;Instead, it asks:&lt;/p&gt;

&lt;p&gt;“What is the MAC address of my default gateway?”&lt;/p&gt;

&lt;p&gt;The router replies with its MAC address.&lt;/p&gt;

&lt;p&gt;Now Computer A sends the packet to the router.&lt;/p&gt;

&lt;p&gt;The router then takes that packet and forwards it toward the destination network, eventually reaching Computer C.&lt;/p&gt;

&lt;p&gt;So the key difference is:&lt;/p&gt;

&lt;p&gt;In local communication, MAC addresses are used and the switch handles the communication.&lt;/p&gt;

&lt;p&gt;In remote communication, IP addresses are used and the router handles the communication.&lt;/p&gt;

&lt;p&gt;The subnet mask plays a critical role because it determines whether the communication is local or remote.&lt;/p&gt;

&lt;p&gt;The default gateway is only used when the destination is outside the local network.&lt;/p&gt;

&lt;p&gt;ARP is used in both cases to resolve IP addresses into MAC addresses.&lt;/p&gt;

&lt;p&gt;Let us summarize everything.&lt;/p&gt;

&lt;p&gt;A computer first uses the subnet mask to determine whether the destination is local or remote.&lt;/p&gt;

&lt;p&gt;If the destination is local, the computer uses ARP to find the MAC address of the destination and sends the data through a switch.&lt;/p&gt;

&lt;p&gt;If the destination is remote, the computer uses ARP to find the MAC address of the default gateway, sends the data to the router, and the router forwards the packet to the destination.&lt;/p&gt;

&lt;p&gt;This is how communication works in a TCP/IP network.&lt;/p&gt;




&lt;h1&gt;
  
  
  💻 COMMANDS (ONLY CODE)
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Check IP configuration
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ipconfig /all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Test local communication
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping 192.168.1.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Test remote communication
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping 192.168.2.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Check ARP table
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;arp &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Router configuration (interfaces)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;enable
&lt;/span&gt;configure terminal

interface gigabitEthernet0/0
ip address 192.168.1.254 255.255.255.0
no shutdown

interface gigabitEthernet0/1
ip address 192.168.2.254 255.255.255.0
no shutdown

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

&lt;/div&gt;






&lt;h2&gt;
  
  
  Verify router interfaces
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;show ip interface brief
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A computer uses the subnet mask to determine whether communication is local or remote. For local communication, it uses ARP to resolve MAC addresses and communicates through a switch. For remote communication, it sends traffic to the default gateway, and the router forwards the packet using IP routing.&lt;/p&gt;

&lt;h1&gt;
  
  
  2. What is an IP Address?
&lt;/h1&gt;

&lt;p&gt;An IP address is an identifier for a computer or device on a network. Every device has to have an IP address for communication purposes.&lt;/p&gt;

&lt;p&gt;And to be specific, I'm talking about an IPv4 address.&lt;/p&gt;

&lt;p&gt;An IPv4 address is a 32-bit numeric address, written as four numbers, separated by periods. Each group of numbers that are separated by periods is called an octet. The number range in each octet is from 0 - 255.&lt;/p&gt;




&lt;h1&gt;
  
  
  3. Network and Host Parts
&lt;/h1&gt;

&lt;p&gt;An IP address consists of two parts. The first part is the network address and the second part is the host address.&lt;/p&gt;

&lt;p&gt;The network address or network ID is a number that's assigned to a network. So every network will have a unique address.&lt;/p&gt;

&lt;p&gt;The host address or host ID is what's assigned to hosts within that network such as computers, servers, tablets, routers, and so on. So every host will have a unique host address.&lt;/p&gt;




&lt;h1&gt;
  
  
  4. Subnet Mask
&lt;/h1&gt;

&lt;p&gt;Now the way to tell which portion of the IP address is the network or the host, is where the subnet mask comes in.&lt;/p&gt;

&lt;p&gt;A subnet mask is a number that resembles an IP address. And it reveals how many bits in the IP address are used for the network by masking the network portion of the IP address.&lt;/p&gt;




&lt;h1&gt;
  
  
  5. Binary (How Computers Understand)
&lt;/h1&gt;

&lt;p&gt;Now in the world of computers and networks, IP addresses and subnet masks in this decimal format here are meaningless. And this is because computers and networks don't read them in this format and that's because they only understand numbers in a binary format, which are 1s and 0s. And these are called bits.&lt;/p&gt;

&lt;p&gt;So the binary number for this IP address is this number here. And the binary number for this subnet mask is this number. And these are the numbers that computers and networks only understand.&lt;/p&gt;




&lt;h1&gt;
  
  
  6. How to Convert to Binary
&lt;/h1&gt;

&lt;p&gt;So the next question is, how do we get these binary numbers from this IP address and this subnet mask?&lt;/p&gt;

&lt;p&gt;So here we have an 8 bit octet chart. The bits in each octet are represented by a number. So starting from the right, the first bit has a value of 1 and then the number doubles with each step. So there's 2 then 4, 8, and so on, all the way up to 128.&lt;/p&gt;

&lt;p&gt;Each bit in the octet can be either a 1 or a 0. If the number is a 1 then the number that it represents counts. If the number is a 0 then the number that it represents does not count.&lt;/p&gt;

&lt;p&gt;So by manipulating the 1s and 0s in the octet you can come up with a number range from 0 - 255.&lt;/p&gt;




&lt;h1&gt;
  
  
  7. Example: Binary Conversion
&lt;/h1&gt;

&lt;p&gt;So for example, the first octet in this IP address is 192.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;128 + 64 = 192

192 = 11000000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Next octet is 168:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;128 + 32 + 8 = 168

168 = 10101000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Next octet is 1:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1 = 00000001
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Last octet is 0:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0 = 00000000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Final binary IP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.0 = 11000000.10101000.00000001.00000000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  8. Subnet Mask in Binary
&lt;/h1&gt;

&lt;p&gt;Now the subnet mask binary conversion is exactly the same way.&lt;/p&gt;

&lt;p&gt;So in this subnet mask the first 3 octets are 255. So if we were to look at this subnet mask in binary form, the first 3 octets would be all 1s because when you count all the numbers in an octet it will equal 255.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;255 = 11111111
0   = 00000000

255.255.255.0 =
11111111.11111111.11111111.00000000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  9. How Subnet Mask Defines Network and Host
&lt;/h1&gt;

&lt;p&gt;So here we have our IP address and subnet mask in binary form lined up together.&lt;/p&gt;

&lt;p&gt;So the way to tell which portion of this IP address is the network part, is when the subnet mask binary digit is a 1 it will indicate the position of the IP address that defines the network.&lt;/p&gt;

&lt;p&gt;So we'll cross out all the digits in the IP address that line up with the 1s in the subnet mask.&lt;/p&gt;

&lt;p&gt;So the 1s in the subnet mask indicate the network address and the 0s indicate the host addresses.&lt;/p&gt;




&lt;h1&gt;
  
  
  10. Example: Network vs Host
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IP:   192.168.1.10
Mask: 255.255.255.0

Network: 192.168.1
Host:                10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  11. Advanced Mask Example (224)
&lt;/h1&gt;

&lt;p&gt;Now what if the subnet mask was 224?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;224 = 11100000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Mask: 255.255.224.0

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

&lt;/div&gt;



&lt;p&gt;This means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;first 2 octets + part of 3rd = network&lt;/li&gt;
&lt;li&gt;rest = host&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  12. Why Network + Host Exists
&lt;/h1&gt;

&lt;p&gt;Now the reason for this is manageability. It's for breaking down a large network into smaller networks or subnetworks, which is known as subnetting.&lt;/p&gt;




&lt;h1&gt;
  
  
  13. Problem Without Subnetting
&lt;/h1&gt;

&lt;p&gt;If all computers are in one network:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;broadcast goes to everyone&lt;/li&gt;
&lt;li&gt;network becomes slow&lt;/li&gt;
&lt;li&gt;hard to manage&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  14. Routers
&lt;/h1&gt;

&lt;p&gt;Networks are broken down and physically separated by using routers.&lt;/p&gt;

&lt;p&gt;Broadcasts do not go past routers.&lt;/p&gt;




&lt;h1&gt;
  
  
  15. Subnetting
&lt;/h1&gt;

&lt;p&gt;Subnetting is done by changing the subnet mask by borrowing some of the bits that were designated for hosts.&lt;/p&gt;




&lt;h1&gt;
  
  
  16. Borrowing Bits (IMPORTANT)
&lt;/h1&gt;

&lt;p&gt;Original:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/24 → 255.255.255.0
Hosts = 254
Subnets = 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Borrow 1 bit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/25 → 255.255.255.128

Subnets = 2
Hosts per subnet = 126
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Borrow 2 bits:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/26 → 255.255.255.192

Subnets = 4
Hosts = 62
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Borrow 3 bits:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/27 → 255.255.255.224

Subnets = 8
Hosts = 30
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Borrow 4 bits:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/28 → 255.255.255.240

Subnets = 16
Hosts = 14
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Borrow 5 bits:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/29 → 255.255.255.248

Subnets = 32
Hosts = 6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Borrow 6 bits:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/30 → 255.255.255.252

Subnets = 64
Hosts = 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Borrow 7 bits:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/31 → 255.255.255.254

Subnets = 128
Hosts = 0 usable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  17. Important Rule
&lt;/h1&gt;

&lt;p&gt;The more bits the network portion borrows from the host portion:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;number of subnets doubles&lt;/li&gt;
&lt;li&gt;number of hosts halves&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  18. Example: Business Case
&lt;/h1&gt;

&lt;p&gt;We need 3 networks.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;We borrow 2 bits → /26

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

&lt;/div&gt;



&lt;p&gt;This gives:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;4 subnets (enough for 3)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  19. Subnet Ranges Example
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Step = 256 - 192 = 64

Subnets:
0
64
128
192
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Ranges:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0–63
64–127
128–191
192–255
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  20. CIDR
&lt;/h1&gt;

&lt;p&gt;CIDR = slash notation&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/24 = 255.255.255.0
/25 = 255.255.255.128
/26 = 255.255.255.192
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  21. Final Summary
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;IP = identifier&lt;/li&gt;
&lt;li&gt;Bits = 0 and 1&lt;/li&gt;
&lt;li&gt;Subnet mask = divides network and host&lt;/li&gt;
&lt;li&gt;1 = network, 0 = host&lt;/li&gt;
&lt;li&gt;Subnetting = splitting networks&lt;/li&gt;
&lt;li&gt;Borrow bits → more networks, fewer hosts&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>IP address and subletting</title>
      <dc:creator>Aisalkyn Aidarova</dc:creator>
      <pubDate>Wed, 15 Apr 2026 01:39:35 +0000</pubDate>
      <link>https://forem.com/jumptotech/ip-address-and-subletting-44cb</link>
      <guid>https://forem.com/jumptotech/ip-address-and-subletting-44cb</guid>
      <description>&lt;h1&gt;
  
  
  🧠 PART 1 — What is an IP Address?
&lt;/h1&gt;

&lt;p&gt;An IP address is a unique identifier for a device in a network.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every IP has &lt;strong&gt;2 parts&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[ NETWORK PART ] [ HOST PART ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🔍 PART 2 — Network vs Host (MOST IMPORTANT)
&lt;/h1&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IP: 192.168.1.10
Mask: 255.255.255.0 (/24)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 This means:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Network: 192.168.1
Host: .10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧠 Rule
&lt;/h2&gt;

&lt;p&gt;Subnet mask decides the split.&lt;/p&gt;




&lt;h1&gt;
  
  
  📊 PART 3 — Subnet Mask Explained (Power Concept)
&lt;/h1&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;255.255.255.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Binary:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;11111111.11111111.11111111.00000000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 Count 1s:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;24 bits → NETWORK
8 bits → HOST
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🔥 POWER RULE (THIS IS YOUR “POWER 8”)
&lt;/h1&gt;

&lt;p&gt;👉 Number of hosts =&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2^(host bits) - 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Example:
&lt;/h2&gt;

&lt;p&gt;For /24:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Host bits = 8

2^8 = 256
256 - 2 = 254 usable IPs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  💡 WHY -2?
&lt;/h2&gt;

&lt;p&gt;Because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1 = Network address&lt;/li&gt;
&lt;li&gt;1 = Broadcast address&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  📊 QUICK TABLE (VERY IMPORTANT FOR TEACHING)
&lt;/h1&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Subnet&lt;/th&gt;
&lt;th&gt;Host Bits&lt;/th&gt;
&lt;th&gt;Total IPs&lt;/th&gt;
&lt;th&gt;Usable&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;/24&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;256&lt;/td&gt;
&lt;td&gt;254&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/25&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;128&lt;/td&gt;
&lt;td&gt;126&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/26&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;64&lt;/td&gt;
&lt;td&gt;62&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/27&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;32&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/28&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h1&gt;
  
  
  🧠 PART 4 — What is Subnetting?
&lt;/h1&gt;

&lt;p&gt;Subnetting = dividing one network into smaller networks.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.0/24
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Split into 2:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.0/25
192.168.1.128/25
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🔥 PART 5 — HOW SPLITTING WORKS
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Example: /24 → /25
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Borrow 1 bit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2^1 = 2 subnets
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Result:
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Subnet&lt;/th&gt;
&lt;th&gt;Range&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;192.168.1.0/25&lt;/td&gt;
&lt;td&gt;1–126&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;192.168.1.128/25&lt;/td&gt;
&lt;td&gt;129–254&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h1&gt;
  
  
  🧪 PART 6 — LAB (VERY IMPORTANT)
&lt;/h1&gt;

&lt;h2&gt;
  
  
  🎯 Goal:
&lt;/h2&gt;

&lt;p&gt;Understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;network vs host&lt;/li&gt;
&lt;li&gt;subnetting&lt;/li&gt;
&lt;li&gt;IP allocation&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🔧 LAB SETUP
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Use ONE network:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.0/24
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  STEP 1 — Split into 2 subnets
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Subnet mask → /25
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you have:&lt;/p&gt;

&lt;h3&gt;
  
  
  Subnet 1:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Network: 192.168.1.0
Range: 192.168.1.1 – 192.168.1.126
Gateway: 192.168.1.126 or .1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Subnet 2:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Network: 192.168.1.128
Range: 192.168.1.129 – 192.168.1.254
Gateway: 192.168.1.254 or .129
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  STEP 2 — Build in Packet Tracer
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Devices:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;1 Router&lt;/li&gt;
&lt;li&gt;2 Switches&lt;/li&gt;
&lt;li&gt;4 PCs (2 per subnet)&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  STEP 3 — Assign IPs
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Subnet 1:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PC1 → 192.168.1.10
PC2 → 192.168.1.20
Gateway → 192.168.1.1
Mask → 255.255.255.128
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Subnet 2:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PC3 → 192.168.1.130
PC4 → 192.168.1.140
Gateway → 192.168.1.129
Mask → 255.255.255.128
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  STEP 4 — Configure Router
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;enable
&lt;/span&gt;configure terminal

interface g0/0
ip address 192.168.1.1 255.255.255.128
no shutdown

interface g0/1
ip address 192.168.1.129 255.255.255.128
no shutdown
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  STEP 5 — TEST
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Same subnet:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping 192.168.1.20
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✔ works&lt;/p&gt;




&lt;h2&gt;
  
  
  Different subnet:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping 192.168.1.130
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;✔ works via router&lt;/p&gt;




&lt;h1&gt;
  
  
  🧠 PART 7 — EXPLAIN LIKE A PRO
&lt;/h1&gt;

&lt;p&gt;👉 You can say:&lt;/p&gt;

&lt;p&gt;“An IP address is divided into network and host portions based on the subnet mask. Subnetting allows us to split a large network into smaller networks. For example, a /24 network can be divided into two /25 subnets by borrowing one bit. Each subnet has its own range of usable IP addresses. This improves organization, scalability, and security.”&lt;/p&gt;




&lt;h1&gt;
  
  
  🔥 BONUS — VISUAL EXPLANATION (VERY POWERFUL)
&lt;/h1&gt;

&lt;p&gt;Think:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/24 = one big apartment building
/25 = two floors
/26 = four floors
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each split:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2^n networks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>packet tracer lab: subletting</title>
      <dc:creator>Aisalkyn Aidarova</dc:creator>
      <pubDate>Tue, 14 Apr 2026 20:08:11 +0000</pubDate>
      <link>https://forem.com/jumptotech/packet-tracer-lab-subletting-1k42</link>
      <guid>https://forem.com/jumptotech/packet-tracer-lab-subletting-1k42</guid>
      <description>&lt;h1&gt;
  
  
  1. What is a subnet?
&lt;/h1&gt;

&lt;p&gt;A subnet, or subnetwork, is a smaller network created from a larger IP network. Instead of putting every device into one big network, we divide the network into smaller logical groups.&lt;/p&gt;

&lt;p&gt;For example, instead of placing all devices in one network like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.0/24
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;we can separate devices into different networks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.0/24
192.168.2.0/24
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each of these is a separate subnet.&lt;/p&gt;

&lt;p&gt;A subnet is a logical boundary. Devices inside the same subnet can communicate directly. Devices in different subnets cannot communicate directly unless a router or Layer 3 device routes traffic between them.&lt;/p&gt;

&lt;p&gt;That is the key idea:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Same subnet = direct communication&lt;/li&gt;
&lt;li&gt;Different subnet = router required&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  2. What does “segregation by subnet” mean?
&lt;/h1&gt;

&lt;p&gt;Segregation means separating devices into different network groups based on purpose, role, department, security level, or location.&lt;/p&gt;

&lt;p&gt;For example, a company may separate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HR department&lt;/li&gt;
&lt;li&gt;Finance department&lt;/li&gt;
&lt;li&gt;Developers&lt;/li&gt;
&lt;li&gt;Servers&lt;/li&gt;
&lt;li&gt;Guests&lt;/li&gt;
&lt;li&gt;Printers&lt;/li&gt;
&lt;li&gt;Security cameras&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of allowing all of them to live in one big flat network, the company creates different subnets.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.10.0/24  → HR
192.168.20.0/24  → Finance
192.168.30.0/24  → Developers
192.168.40.0/24  → Servers
192.168.50.0/24  → Guest Wi-Fi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is network segregation.&lt;/p&gt;




&lt;h1&gt;
  
  
  3. Why do companies separate subnets?
&lt;/h1&gt;

&lt;p&gt;Companies separate subnets because one large network creates many problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security
&lt;/h2&gt;

&lt;p&gt;If every device is in one subnet, every device is closer to every other device. If one machine is compromised, an attacker can move more easily across the network.&lt;/p&gt;

&lt;p&gt;When networks are separated into subnets, companies can control communication between them using routers, ACLs, firewalls, and security policies.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Guest Wi-Fi should not access company servers&lt;/li&gt;
&lt;li&gt;Finance should not be reachable by everyone&lt;/li&gt;
&lt;li&gt;Test environment should not freely reach production&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Performance
&lt;/h2&gt;

&lt;p&gt;In one large subnet, broadcast traffic increases. More devices share the same broadcast domain. That can slow down the network.&lt;/p&gt;

&lt;p&gt;Subnetting reduces unnecessary broadcast traffic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Easier management
&lt;/h2&gt;

&lt;p&gt;It is easier to identify devices and departments when each subnet has a purpose.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;192.168.10.x = HR&lt;/li&gt;
&lt;li&gt;192.168.20.x = Finance&lt;/li&gt;
&lt;li&gt;192.168.30.x = IT&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes troubleshooting easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better control
&lt;/h2&gt;

&lt;p&gt;Companies can decide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;which subnet can talk to which subnet&lt;/li&gt;
&lt;li&gt;which ports are allowed&lt;/li&gt;
&lt;li&gt;which applications are allowed&lt;/li&gt;
&lt;li&gt;which users are isolated&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Scalability
&lt;/h2&gt;

&lt;p&gt;As a company grows, one big network becomes messy. Subnetting helps the network grow in a clean and organized way.&lt;/p&gt;




&lt;h1&gt;
  
  
  4. Real-world company example
&lt;/h1&gt;

&lt;p&gt;Imagine a company has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HR users&lt;/li&gt;
&lt;li&gt;Finance users&lt;/li&gt;
&lt;li&gt;Developers&lt;/li&gt;
&lt;li&gt;Application servers&lt;/li&gt;
&lt;li&gt;Database servers&lt;/li&gt;
&lt;li&gt;Guest Wi-Fi&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If all devices are in one network, then:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;guests might reach internal systems&lt;/li&gt;
&lt;li&gt;developers may access finance systems directly&lt;/li&gt;
&lt;li&gt;malware can spread more easily&lt;/li&gt;
&lt;li&gt;troubleshooting becomes harder&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A better design is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Subnet 1: 192.168.1.0/24   → Office Users
Subnet 2: 192.168.2.0/24   → Servers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then the router controls traffic between them.&lt;/p&gt;

&lt;p&gt;That is the idea you are building in Packet Tracer.&lt;/p&gt;




&lt;h1&gt;
  
  
  5. Important subnet terms
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Network address
&lt;/h2&gt;

&lt;p&gt;This identifies the subnet itself.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.0/24
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;192.168.1.0&lt;/code&gt; is the network address.&lt;/p&gt;

&lt;h2&gt;
  
  
  Host address
&lt;/h2&gt;

&lt;p&gt;These are usable device IP addresses inside the subnet.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.1
192.168.1.2
192.168.1.100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Broadcast address
&lt;/h2&gt;

&lt;p&gt;This is the last address in the subnet, used for broadcast traffic.&lt;/p&gt;

&lt;p&gt;For &lt;code&gt;192.168.1.0/24&lt;/code&gt;, broadcast is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.255
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Subnet mask
&lt;/h2&gt;

&lt;p&gt;The subnet mask tells us which part of the IP is the network portion and which part is the host portion.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;255.255.255.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This means &lt;code&gt;/24&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Default gateway
&lt;/h2&gt;

&lt;p&gt;This is the router interface IP used to leave the local subnet.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.254
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If a host wants to reach another subnet, it sends traffic to the default gateway.&lt;/p&gt;




&lt;h1&gt;
  
  
  6. Lab objective
&lt;/h1&gt;

&lt;p&gt;In this lab, you will build two separate subnets and observe:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;devices in each subnet&lt;/li&gt;
&lt;li&gt;routing between subnets&lt;/li&gt;
&lt;li&gt;why the router is required&lt;/li&gt;
&lt;li&gt;how segregation improves control&lt;/li&gt;
&lt;li&gt;how ACLs can block one subnet from reaching another&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  7. Lab topology
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Subnet 1
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Network: 192.168.1.0/24
Gateway: 192.168.1.254
Devices:
PC0 → 192.168.1.1
PC1 → 192.168.1.2
PC2 → 192.168.1.3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Subnet 2
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Network: 192.168.2.0/24
Gateway: 192.168.2.254
Devices:
Laptop0 → 192.168.2.1
Laptop1 → 192.168.2.2
Laptop2 → 192.168.2.3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Router interfaces
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GigabitEthernet0/0 → 192.168.1.254
GigabitEthernet0/1 → 192.168.2.254
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  8. Devices needed
&lt;/h1&gt;

&lt;p&gt;Use these in Packet Tracer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1 Router (1941)&lt;/li&gt;
&lt;li&gt;2 Switches&lt;/li&gt;
&lt;li&gt;3 PCs&lt;/li&gt;
&lt;li&gt;3 Laptops&lt;/li&gt;
&lt;li&gt;Copper straight-through cables&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  9. Build the topology
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Step 1: Add devices
&lt;/h2&gt;

&lt;p&gt;Place:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one router in the middle&lt;/li&gt;
&lt;li&gt;one switch for subnet 1&lt;/li&gt;
&lt;li&gt;one switch for subnet 2&lt;/li&gt;
&lt;li&gt;three PCs on the left side&lt;/li&gt;
&lt;li&gt;three laptops on the right side&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 2: Cable connections
&lt;/h2&gt;

&lt;p&gt;Connect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PC0 to Switch1&lt;/li&gt;
&lt;li&gt;PC1 to Switch1&lt;/li&gt;
&lt;li&gt;PC2 to Switch1&lt;/li&gt;
&lt;li&gt;Switch1 to Router Gig0/0&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Connect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Laptop0 to Switch2&lt;/li&gt;
&lt;li&gt;Laptop1 to Switch2&lt;/li&gt;
&lt;li&gt;Laptop2 to Switch2&lt;/li&gt;
&lt;li&gt;Switch2 to Router Gig0/1&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use straight-through cables or automatic cable selection.&lt;/p&gt;




&lt;h1&gt;
  
  
  10. Configure subnet 1 hosts
&lt;/h1&gt;

&lt;p&gt;On each PC, go to Desktop → IP Configuration.&lt;/p&gt;

&lt;h2&gt;
  
  
  PC0
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IP Address: 192.168.1.1
Subnet Mask: 255.255.255.0
Default Gateway: 192.168.1.254
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  PC1
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IP Address: 192.168.1.2
Subnet Mask: 255.255.255.0
Default Gateway: 192.168.1.254
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  PC2
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IP Address: 192.168.1.3
Subnet Mask: 255.255.255.0
Default Gateway: 192.168.1.254
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  11. Configure subnet 2 hosts
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Laptop0
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IP Address: 192.168.2.1
Subnet Mask: 255.255.255.0
Default Gateway: 192.168.2.254
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Laptop1
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IP Address: 192.168.2.2
Subnet Mask: 255.255.255.0
Default Gateway: 192.168.2.254
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Laptop2
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IP Address: 192.168.2.3
Subnet Mask: 255.255.255.0
Default Gateway: 192.168.2.254
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  12. Configure the router
&lt;/h1&gt;

&lt;p&gt;Open router CLI and type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;enable
&lt;/span&gt;configure terminal
interface gigabitEthernet0/0
ip address 192.168.1.254 255.255.255.0
no shutdown
&lt;span class="nb"&gt;exit
&lt;/span&gt;interface gigabitEthernet0/1
ip address 192.168.2.254 255.255.255.0
no shutdown
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  13. Verification lab
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Test 1: Same subnet communication
&lt;/h2&gt;

&lt;p&gt;From PC0, ping PC1:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping 192.168.1.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This should succeed.&lt;/p&gt;

&lt;p&gt;Why? Because both devices are in the same subnet and can communicate directly through the switch.&lt;/p&gt;




&lt;h2&gt;
  
  
  Test 2: Across subnets
&lt;/h2&gt;

&lt;p&gt;From PC0, ping Laptop0:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping 192.168.2.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This should also succeed if the router is configured correctly.&lt;/p&gt;

&lt;p&gt;Why? Because the router connects both subnets and forwards traffic between them.&lt;/p&gt;




&lt;h1&gt;
  
  
  14. Explain what is happening during the ping
&lt;/h1&gt;

&lt;p&gt;When PC0 tries to reach 192.168.2.1, it checks the destination.&lt;/p&gt;

&lt;p&gt;PC0 sees that 192.168.2.1 is not in its own subnet, because PC0 belongs to 192.168.1.0/24.&lt;/p&gt;

&lt;p&gt;So PC0 does not send traffic directly to Laptop0. Instead, it sends traffic to its default gateway:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.254
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That is the router interface.&lt;/p&gt;

&lt;p&gt;The router receives the packet, checks its routing information, and forwards the packet to the second subnet through interface Gig0/1.&lt;/p&gt;

&lt;p&gt;That is why default gateway is so important.&lt;/p&gt;




&lt;h1&gt;
  
  
  15. Show the importance of segregation
&lt;/h1&gt;

&lt;p&gt;Now you can explain the design like this:&lt;/p&gt;

&lt;p&gt;“In this lab, I created two separate subnets. Devices in subnet 1 use the 192.168.1.0/24 range. Devices in subnet 2 use the 192.168.2.0/24 range. The separation gives us better security, control, and organization. Instead of allowing every device to exist in one flat network, we created logical boundaries. The router provides controlled communication between these boundaries.”&lt;/p&gt;

&lt;p&gt;That is a strong explanation.&lt;/p&gt;




&lt;h1&gt;
  
  
  16. Security control lab with ACL
&lt;/h1&gt;

&lt;p&gt;Now show why segregation is powerful.&lt;/p&gt;

&lt;p&gt;Without segregation, all devices are in one flat network and it is harder to control communication.&lt;/p&gt;

&lt;p&gt;With separate subnets, the router can control traffic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Goal
&lt;/h2&gt;

&lt;p&gt;Block subnet 1 from reaching subnet 2.&lt;/p&gt;

&lt;p&gt;In router CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;enable
&lt;/span&gt;configure terminal
access-list 100 deny ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
access-list 100 permit ip any any
interface gigabitEthernet0/0
ip access-group 100 &lt;span class="k"&gt;in
&lt;/span&gt;end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  17. Test security policy
&lt;/h1&gt;

&lt;p&gt;From PC0:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping 192.168.2.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This should fail.&lt;/p&gt;

&lt;p&gt;Why? Because the router is now blocking traffic from subnet 1 to subnet 2.&lt;/p&gt;

&lt;p&gt;That is the real value of subnet segregation:&lt;br&gt;
it allows traffic control between groups.&lt;/p&gt;

&lt;h1&gt;
  
  
  21. Interview-ready answer
&lt;/h1&gt;

&lt;p&gt;Here is a polished answer:&lt;/p&gt;

&lt;p&gt;“A subnet is a logical subdivision of an IP network. It groups devices into smaller broadcast domains. Companies use subnetting to improve security, reduce broadcast traffic, organize departments or services, and control communication between groups. In my lab, I created two subnets, configured router interfaces as gateways for each subnet, verified inter-subnet routing, and then applied an ACL to block one subnet from accessing the other. That demonstrated why segmentation is important in real environments.”&lt;/p&gt;




&lt;h1&gt;
  
  
  22. Simple real-life analogy
&lt;/h1&gt;

&lt;p&gt;You can explain it like this:&lt;/p&gt;

&lt;p&gt;“A large company building has many departments. If everyone works in one giant open room, it becomes noisy, unorganized, and insecure. Subnetting is like giving each department its own room. The router is like the controlled hallway between rooms. The ACL is like a security guard deciding who can pass.”&lt;/p&gt;

&lt;p&gt;That makes the idea very easy to remember.&lt;/p&gt;




&lt;h1&gt;
  
  
  23. Short conclusion
&lt;/h1&gt;

&lt;p&gt;Subnetting is not only about IP addresses. It is about design, control, and security.&lt;/p&gt;

&lt;p&gt;When a company creates subnets, it is organizing the network in a smarter way. It separates traffic, reduces unnecessary communication, improves performance, and makes policy enforcement possible. That is why subnetting is so important in enterprise networking, cloud networking, and DevOps environments.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Install Packet Tracer (Mac) + First Network</title>
      <dc:creator>Aisalkyn Aidarova</dc:creator>
      <pubDate>Mon, 13 Apr 2026 22:47:26 +0000</pubDate>
      <link>https://forem.com/jumptotech/install-packet-tracer-mac-first-network-20j9</link>
      <guid>https://forem.com/jumptotech/install-packet-tracer-mac-first-network-20j9</guid>
      <description>&lt;h2&gt;
  
  
  What is Packet Tracer
&lt;/h2&gt;

&lt;p&gt;Cisco Packet Tracer is a network simulation tool created by Cisco.&lt;/p&gt;

&lt;p&gt;It allows you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;build networks (PCs, switches, routers)&lt;/li&gt;
&lt;li&gt;connect devices using cables&lt;/li&gt;
&lt;li&gt;assign IP addresses&lt;/li&gt;
&lt;li&gt;test connectivity (ping)&lt;/li&gt;
&lt;li&gt;troubleshoot network issues&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why it is used
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;to understand how networks actually work&lt;/li&gt;
&lt;li&gt;to visualize communication between devices&lt;/li&gt;
&lt;li&gt;to practice safely without real hardware&lt;/li&gt;
&lt;li&gt;to build foundational networking skills used in cloud (AWS, Kubernetes)&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  STEP 1 — Create Cisco Account
&lt;/h1&gt;

&lt;p&gt;Open:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://www.netacad.com/" rel="noopener noreferrer"&gt;https://www.netacad.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Actions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;Sign Up&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Create account (email + password)&lt;/li&gt;
&lt;li&gt;Verify email&lt;/li&gt;
&lt;li&gt;Log in&lt;/li&gt;
&lt;/ol&gt;




&lt;h1&gt;
  
  
  STEP 2 — Download Packet Tracer (Mac)
&lt;/h1&gt;

&lt;p&gt;Open:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://www.netacad.com/resources/lab-downloads" rel="noopener noreferrer"&gt;https://www.netacad.com/resources/lab-downloads&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Actions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Scroll to &lt;strong&gt;Packet Tracer&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;macOS (.dmg)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Download file&lt;/li&gt;
&lt;/ol&gt;




&lt;h1&gt;
  
  
  STEP 3 — Install (Mac)
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;code&gt;.dmg&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Drag &lt;strong&gt;Packet Tracer&lt;/strong&gt; → &lt;strong&gt;Applications&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Open from Applications&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If blocked:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;System Settings → Privacy &amp;amp; Security → &lt;strong&gt;Open Anyway&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  STEP 4 — First Launch
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Open Packet Tracer&lt;/li&gt;
&lt;li&gt;Log in using Cisco account&lt;/li&gt;
&lt;/ol&gt;




&lt;h1&gt;
  
  
  STEP 5 — Interface Overview
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FLBBVrtLFW2N45-ifN51j1ks-jdm7Oc85kU1YWuUP9RoRKcttVt-42tJSu1KKIapcT_c282N7Ia2_NnleOFYbUlF2HpTnupj0FCNTU24GhGmwzrqsPFmmvnV_uaonW8t7IH5Ekwkgm89tnYRloobpMX3HWGyD_2O8pE_G2jInzgEpOmjugUTgXSOv4AeCf89a%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FLBBVrtLFW2N45-ifN51j1ks-jdm7Oc85kU1YWuUP9RoRKcttVt-42tJSu1KKIapcT_c282N7Ia2_NnleOFYbUlF2HpTnupj0FCNTU24GhGmwzrqsPFmmvnV_uaonW8t7IH5Ekwkgm89tnYRloobpMX3HWGyD_2O8pE_G2jInzgEpOmjugUTgXSOv4AeCf89a%3Fpurpose%3Dfullsize" alt="Image" width="1085" height="676"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FvhcN3zAUw_lbCi-YsrVBLSN_oStb8-sRgOzznIY_jnGq4mz38AHmmvZ05AirDHxomSAyEdK4c4_7714_mWIN8frjP7BwVzNNIuCPE9zWscSd327rekb0HfsVL9zC6auhMrKRThoNHqqjnSJgoe5bokbbz5qSECoYg6X9dDRAAQWFCj8qS0ULrwrpTZxP97zR%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FvhcN3zAUw_lbCi-YsrVBLSN_oStb8-sRgOzznIY_jnGq4mz38AHmmvZ05AirDHxomSAyEdK4c4_7714_mWIN8frjP7BwVzNNIuCPE9zWscSd327rekb0HfsVL9zC6auhMrKRThoNHqqjnSJgoe5bokbbz5qSECoYg6X9dDRAAQWFCj8qS0ULrwrpTZxP97zR%3Fpurpose%3Dfullsize" alt="Image" width="699" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FwUgH0zKibbBv5bb1aHERGk_mJ_YLPA-wR7I9EqpdS7RgK2EyojbjFOmTJIBV_JmdJSRCttmJ99o1LJHIBs2UAAimwpOxqkkJkRsp5xWARDlsAaKgN5-ULdQgz0wQBEaf25NubQDYx4C-lnMeFyDpl7gM_Xr5fjPgDQR5W8mPBT8EvwXFMf2G3jmTXj4a_Gra%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FwUgH0zKibbBv5bb1aHERGk_mJ_YLPA-wR7I9EqpdS7RgK2EyojbjFOmTJIBV_JmdJSRCttmJ99o1LJHIBs2UAAimwpOxqkkJkRsp5xWARDlsAaKgN5-ULdQgz0wQBEaf25NubQDYx4C-lnMeFyDpl7gM_Xr5fjPgDQR5W8mPBT8EvwXFMf2G3jmTXj4a_Gra%3Fpurpose%3Dfullsize" alt="Image" width="1366" height="728"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FPd2ln6b8byoks28H6CUtiqPfPsQxZi868TcIyiDACtRY5xjRrl7CZhAB6sy63szPBMfWEMcQcP4mWwxLYgFkqS3qIzYDQXAdNQCxnoT-8D8gDV6ZIEMnuQEY0wcBesI1fMfiqhqUSCgJkH8wbR5hCR-l94jKMzjpqUOCyrbpViVSKbKG6_n9-j7Z1jhHsK2f%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FPd2ln6b8byoks28H6CUtiqPfPsQxZi868TcIyiDACtRY5xjRrl7CZhAB6sy63szPBMfWEMcQcP4mWwxLYgFkqS3qIzYDQXAdNQCxnoT-8D8gDV6ZIEMnuQEY0wcBesI1fMfiqhqUSCgJkH8wbR5hCR-l94jKMzjpqUOCyrbpViVSKbKG6_n9-j7Z1jhHsK2f%3Fpurpose%3Dfullsize" alt="Image" width="1366" height="768"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2F_Rq4K5u1thxUPCqL4UjRyfRIY8s7wRxgEiUhiBJFZ70czspSkScCD0_QNVqFTed4yLqFcrYe75QUVLalFMhyWh5aatTBmgws-cPfl8fwG9Tpmg80wInS17qqNwFO7sM4B-tMLytN-LMH0eS9r9azQMuXm0knBHcz_wgTPskh1WK1dUltYM1cJTMIrAORmyPU%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2F_Rq4K5u1thxUPCqL4UjRyfRIY8s7wRxgEiUhiBJFZ70czspSkScCD0_QNVqFTed4yLqFcrYe75QUVLalFMhyWh5aatTBmgws-cPfl8fwG9Tpmg80wInS17qqNwFO7sM4B-tMLytN-LMH0eS9r9azQMuXm0knBHcz_wgTPskh1WK1dUltYM1cJTMIrAORmyPU%3Fpurpose%3Dfullsize" alt="Image" width="1070" height="884"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FcoriMQ6w4dxBdr8CMCmJW4yiO3kpdbBaZBJFOybCoVidrd4ro2ElrkqQlo_WpNjHELjYO2YRhT-u22_JWaqfB71MaJr_HEqjjtUDcrLfemLLnwTqNrzEPhLWzsp7pniD_atnbFtsPFrhyXFLwUoJf6Qsdz6Nb4RytoGMxZ5TgMLGe8a-_bEKnRPjj8D7V8JW%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FcoriMQ6w4dxBdr8CMCmJW4yiO3kpdbBaZBJFOybCoVidrd4ro2ElrkqQlo_WpNjHELjYO2YRhT-u22_JWaqfB71MaJr_HEqjjtUDcrLfemLLnwTqNrzEPhLWzsp7pniD_atnbFtsPFrhyXFLwUoJf6Qsdz6Nb4RytoGMxZ5TgMLGe8a-_bEKnRPjj8D7V8JW%3Fpurpose%3Dfullsize" alt="Image" width="550" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Main components
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Workspace&lt;/strong&gt; → area to build network&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bottom panel&lt;/strong&gt; → devices and tools&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Device Types
&lt;/h2&gt;

&lt;h3&gt;
  
  
  PC (End Devices)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Represents a computer&lt;/li&gt;
&lt;li&gt;Used to send/receive data&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Switch
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Connects devices in the same network&lt;/li&gt;
&lt;li&gt;Operates inside one LAN&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Router
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Connects different networks&lt;/li&gt;
&lt;li&gt;Enables communication between networks&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Cables (Connections ⚡)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Used to connect devices physically&lt;/li&gt;
&lt;li&gt;Use: &lt;strong&gt;Copper Straight-Through&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  STEP 6 — First Network Build
&lt;/h1&gt;




&lt;h2&gt;
  
  
  Add Devices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Add &lt;strong&gt;2 PCs&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Add &lt;strong&gt;1 Switch&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Connect Devices
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Click ⚡ Connections&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Copper Straight-Through&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Connect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PC0 → Switch&lt;/li&gt;
&lt;li&gt;PC1 → Switch&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2Fe-aw_66CgS9xeFYoZMjtJLk-4KOkT9zzMB9BxYnYCOSoZN5bsEnMvM2kTQxKqZ627KhhjpDFW5Dr7MtxY4GIhqMxhDZMFguWbRSFt3pwTrQmtqwnCCrRwZGTkMP6APUxvSXhMIVU5sklbM5XT0b7Ne-lEAtAKcRhubKIRE0bxPNe-TCaGLZnyuio8taRlVYD%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2Fe-aw_66CgS9xeFYoZMjtJLk-4KOkT9zzMB9BxYnYCOSoZN5bsEnMvM2kTQxKqZ627KhhjpDFW5Dr7MtxY4GIhqMxhDZMFguWbRSFt3pwTrQmtqwnCCrRwZGTkMP6APUxvSXhMIVU5sklbM5XT0b7Ne-lEAtAKcRhubKIRE0bxPNe-TCaGLZnyuio8taRlVYD%3Fpurpose%3Dfullsize" alt="Image" width="616" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FIbZh89UjXeP1ckQGXqdrSNxrhBydXzc5NbzWDVyrMbDv5FjyrvSp9WqYKPwICYilQsfZ61hHaO-NNpQpMUj08bkl2UDSQQvOdwu4gajYlM0oU-FxkooNhcOmucudiSbuFVKa8oq1IY9ZR4OKiVxGSrNXwxgPWpquKiKXo_OI0ZmxPxSgrB20dgYWJj7vsVFI%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FIbZh89UjXeP1ckQGXqdrSNxrhBydXzc5NbzWDVyrMbDv5FjyrvSp9WqYKPwICYilQsfZ61hHaO-NNpQpMUj08bkl2UDSQQvOdwu4gajYlM0oU-FxkooNhcOmucudiSbuFVKa8oq1IY9ZR4OKiVxGSrNXwxgPWpquKiKXo_OI0ZmxPxSgrB20dgYWJj7vsVFI%3Fpurpose%3Dfullsize" alt="Image" width="1366" height="725"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2Fp1Vd4Qz09FTGgVxWPDDXTSQpO1C5PcaiP8WVM7eC5tvKY0pdIwGCeeDEUG_kxVzVwCLsPsKbik88XsomtcoZsGsgij_oJ4-rxaUrJcgrIG5XdCxZnhCcWrbu4z4NE7aiKe8enGaKS6o-n8xWCvg_1CqWGVlXjthn09hJqafhCEHRM9GCRSbK3hbmtho4GhjA%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2Fp1Vd4Qz09FTGgVxWPDDXTSQpO1C5PcaiP8WVM7eC5tvKY0pdIwGCeeDEUG_kxVzVwCLsPsKbik88XsomtcoZsGsgij_oJ4-rxaUrJcgrIG5XdCxZnhCcWrbu4z4NE7aiKe8enGaKS6o-n8xWCvg_1CqWGVlXjthn09hJqafhCEHRM9GCRSbK3hbmtho4GhjA%3Fpurpose%3Dfullsize" alt="Image" width="808" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FtwMPOWZNdlCKtFxem4e8A9KA3Kcs_kuSp-i2hYafYecN_WwpGYXrNCW09i_l5Kk4oOEaf-rlu6iA5EqQ6_Etm7EamqXKWfkFAlcW_PnHE7rIYXbQc41VcpOOBdUjot3W1_O2jHFkUojai5u8-tV2fNL4A-GplKSzAWcFDlEcH0XUdffDaBj01NCYxgyvpzxH%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FtwMPOWZNdlCKtFxem4e8A9KA3Kcs_kuSp-i2hYafYecN_WwpGYXrNCW09i_l5Kk4oOEaf-rlu6iA5EqQ6_Etm7EamqXKWfkFAlcW_PnHE7rIYXbQc41VcpOOBdUjot3W1_O2jHFkUojai5u8-tV2fNL4A-GplKSzAWcFDlEcH0XUdffDaBj01NCYxgyvpzxH%3Fpurpose%3Dfullsize" alt="Image" width="602" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FVMQCEfLoxsgXUbw3Oc4FtbGs1CRbfwQJsxgEWLyAgergyurU8FI6jRQOzLAvrsgPX7LTHQoibCnUsq3ApkDYC4naOfwuEUQij635Dged24ZeFYsMgTwyw-nE5K4PXxKRVVU2-mhDz1PNySP8dgvyi_fKrNB8qlosdNU-593fiKMLT7MiO8x6MWqAVHvCC3pS%3Fpurpose%3Dfullsize" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.openai.com%2Fstatic-rsc-4%2FVMQCEfLoxsgXUbw3Oc4FtbGs1CRbfwQJsxgEWLyAgergyurU8FI6jRQOzLAvrsgPX7LTHQoibCnUsq3ApkDYC4naOfwuEUQij635Dged24ZeFYsMgTwyw-nE5K4PXxKRVVU2-mhDz1PNySP8dgvyi_fKrNB8qlosdNU-593fiKMLT7MiO8x6MWqAVHvCC3pS%3Fpurpose%3Dfullsize" alt="Image" width="400" height="357"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  STEP 7 — Configure IP Addresses
&lt;/h1&gt;




&lt;h2&gt;
  
  
  PC0
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Open PC0 → Desktop → IP Configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Set:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IP Address: 192.168.1.1
Subnet Mask: 255.255.255.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  PC1
&lt;/h2&gt;

&lt;p&gt;Set:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IP Address: 192.168.1.2
Subnet Mask: 255.255.255.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  STEP 8 — Test Connectivity
&lt;/h1&gt;




&lt;p&gt;On PC0 → Command Prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ping 192.168.1.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Expected Result
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reply&lt;/strong&gt; → network is working&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Timeout&lt;/strong&gt; → configuration issue&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  STEP 9 — Troubleshooting
&lt;/h1&gt;




&lt;p&gt;Change PC1 IP:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.2.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Run ping again:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ping 192.168.1.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Result
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Communication fails&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Reason
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Devices are in different networks&lt;/li&gt;
&lt;li&gt;No router present&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  STEP 10 — Fix
&lt;/h1&gt;

&lt;p&gt;Change PC1 back:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Run ping again → success&lt;/p&gt;




&lt;h1&gt;
  
  
  RESULT
&lt;/h1&gt;

&lt;p&gt;After completing this lab:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;network devices can be added and connected&lt;/li&gt;
&lt;li&gt;IP addressing is understood&lt;/li&gt;
&lt;li&gt;connectivity can be tested using ping&lt;/li&gt;
&lt;li&gt;basic troubleshooting is performed&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  PRACTICE
&lt;/h1&gt;




&lt;h2&gt;
  
  
  Task 1
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Add 3 PCs&lt;/li&gt;
&lt;li&gt;Connect to 1 switch&lt;/li&gt;
&lt;li&gt;All must communicate&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Task 2
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Break IP configuration&lt;/li&gt;
&lt;li&gt;Restore connectivity&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;This completes the first Packet Tracer lab.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>NETWORK TROUBLESHOOTING LAB (DevOps)</title>
      <dc:creator>Aisalkyn Aidarova</dc:creator>
      <pubDate>Mon, 13 Apr 2026 04:32:57 +0000</pubDate>
      <link>https://forem.com/jumptotech/network-troubleshooting-lab-devops-1df2</link>
      <guid>https://forem.com/jumptotech/network-troubleshooting-lab-devops-1df2</guid>
      <description>&lt;h1&gt;
  
  
  📘 PART 1 — HOW DEVOPS THINKS
&lt;/h1&gt;

&lt;p&gt;When something “doesn’t work,” DevOps engineers follow a logical flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Do I have network connectivity?&lt;/li&gt;
&lt;li&gt;Does DNS resolve correctly?&lt;/li&gt;
&lt;li&gt;Is the server reachable?&lt;/li&gt;
&lt;li&gt;Is the port open?&lt;/li&gt;
&lt;li&gt;Is the application running?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We always troubleshoot &lt;strong&gt;layer by layer&lt;/strong&gt;, not randomly.&lt;/p&gt;




&lt;h1&gt;
  
  
  🧪 PART 2 — CORE NETWORK COMMANDS
&lt;/h1&gt;




&lt;h2&gt;
  
  
  1. Check Your IP Address
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip a
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔍 How to read:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;inet 192.168.x.x&lt;/code&gt; → your machine’s IP&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;127.0.0.1&lt;/code&gt; → localhost&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;eth0&lt;/code&gt;, &lt;code&gt;ens33&lt;/code&gt; → network interfaces&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ When to use:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No internet&lt;/li&gt;
&lt;li&gt;Checking if machine has an IP&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Check Connectivity (Ping)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping google.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔍 How to read:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;64 bytes from ...&lt;/code&gt; → connection is working&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;time=20ms&lt;/code&gt; → latency&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Request timeout&lt;/code&gt; → no connection&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ When to use:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Server not responding&lt;/li&gt;
&lt;li&gt;Check internet access&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. Trace Network Path
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;traceroute google.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔍 How to read:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Each line = one hop&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;* * *&lt;/code&gt; → failure at that point&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ When to use:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Ping works but app doesn’t&lt;/li&gt;
&lt;li&gt;Identify where connection breaks&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. DNS Check
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nslookup google.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔍 How to read:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Address:&lt;/code&gt; → resolved IP&lt;/li&gt;
&lt;li&gt;Error → DNS issue&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ When to use:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Domain not working&lt;/li&gt;
&lt;li&gt;Suspected DNS problem&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Advanced DNS Tool
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig google.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔍 How to read:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ANSWER SECTION&lt;/code&gt; → IP&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;status: NOERROR&lt;/code&gt; → success&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ When to use:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Deep DNS troubleshooting&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  6. Test HTTP/HTTPS
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔍 Better version:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-I&lt;/span&gt; http://example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔍 How to read:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;200 OK&lt;/code&gt; → success&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;404&lt;/code&gt; → not found&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;500&lt;/code&gt; → server error&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Connection refused&lt;/code&gt; → service down&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ When to use:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;API testing&lt;/li&gt;
&lt;li&gt;Website issues&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. Check Open Ports
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;netstat &lt;span class="nt"&gt;-tulnp&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔍 How to read:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;LISTEN&lt;/code&gt; → port is open&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:80&lt;/code&gt;, &lt;code&gt;:443&lt;/code&gt; → ports&lt;/li&gt;
&lt;li&gt;Process name → service&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  8. Modern Alternative
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ss &lt;span class="nt"&gt;-tulnp&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ When to use:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Same as netstat (preferred today)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  9. Check Which Process Uses a Port
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lsof &lt;span class="nt"&gt;-i&lt;/span&gt; :3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔍 Output shows:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Process name&lt;/li&gt;
&lt;li&gt;PID&lt;/li&gt;
&lt;li&gt;Port&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  10. Test Port Connectivity
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Option 1 — Telnet
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;telnet google.com 80
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Option 2 — Netcat (recommended)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nc &lt;span class="nt"&gt;-zv&lt;/span&gt; google.com 80
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔍 How to read:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;succeeded&lt;/code&gt; → port open&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;failed&lt;/code&gt; → port closed&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  11. Check Routing
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ip route
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔍 How to read:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;default via&lt;/code&gt; → gateway (internet path)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  12. Simple DNS Tool
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;host google.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  13. Download Test
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget http://example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🧪 PART 3 — HANDS-ON LAB
&lt;/h1&gt;




&lt;h2&gt;
  
  
  🔥 Task 1 — Check Network Connectivity
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping 8.8.8.8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 If this fails → network issue&lt;/p&gt;




&lt;h2&gt;
  
  
  🔥 Task 2 — Check DNS
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nslookup google.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 If this fails → DNS problem&lt;/p&gt;




&lt;h2&gt;
  
  
  🔥 Task 3 — Check Website Response
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-I&lt;/span&gt; https://google.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 Find the status code&lt;/p&gt;




&lt;h2&gt;
  
  
  🔥 Task 4 — Check Port Availability
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nc &lt;span class="nt"&gt;-zv&lt;/span&gt; google.com 443
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔥 Task 5 — Check Local Service
&lt;/h2&gt;

&lt;p&gt;Run your app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node app.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then check:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ss &lt;span class="nt"&gt;-tulnp&lt;/span&gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🔥 Task 6 — Find Process Using Port
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lsof &lt;span class="nt"&gt;-i&lt;/span&gt; :3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🧪 PART 4 — REAL DEVOPS SCENARIO
&lt;/h1&gt;

&lt;h2&gt;
  
  
  ❗ Problem:
&lt;/h2&gt;

&lt;p&gt;“Application is not accessible”&lt;/p&gt;

&lt;h2&gt;
  
  
  ✅ Step-by-step troubleshooting:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Check internet
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping 8.8.8.8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Check DNS
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nslookup myapp.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Check server
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ping myapp.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Check port
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nc &lt;span class="nt"&gt;-zv&lt;/span&gt; myapp.com 443
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Check HTTP
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-I&lt;/span&gt; https://myapp.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🧠 PART 5 — IMPORTANT INTERVIEW KNOWLEDGE
&lt;/h1&gt;

&lt;p&gt;You MUST understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ping&lt;/code&gt; → connectivity&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;nslookup/dig&lt;/code&gt; → DNS&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;curl&lt;/code&gt; → HTTP&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ss/netstat&lt;/code&gt; → ports&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;nc&lt;/code&gt; → port testing&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;traceroute&lt;/code&gt; → path&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>What is Status Code?</title>
      <dc:creator>Aisalkyn Aidarova</dc:creator>
      <pubDate>Sat, 11 Apr 2026 17:24:50 +0000</pubDate>
      <link>https://forem.com/jumptotech/what-is-status-code-31d7</link>
      <guid>https://forem.com/jumptotech/what-is-status-code-31d7</guid>
      <description>&lt;p&gt;When frontend calls backend, server responds with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Status Code + Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 Status code tells:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;success&lt;/li&gt;
&lt;li&gt;error&lt;/li&gt;
&lt;li&gt;what happened&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  ✅ 1xx — Informational (Rare)
&lt;/h1&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;100&lt;/td&gt;
&lt;td&gt;Continue&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;101&lt;/td&gt;
&lt;td&gt;Switching Protocols&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;👉 Usually not used in your API testing&lt;/p&gt;




&lt;h1&gt;
  
  
  ✅ 2xx — SUCCESS (Most Important)
&lt;/h1&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;When used&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;200&lt;/td&gt;
&lt;td&gt;OK&lt;/td&gt;
&lt;td&gt;GET success&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;201&lt;/td&gt;
&lt;td&gt;Created&lt;/td&gt;
&lt;td&gt;POST success&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;202&lt;/td&gt;
&lt;td&gt;Accepted&lt;/td&gt;
&lt;td&gt;Request accepted (async)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;204&lt;/td&gt;
&lt;td&gt;No Content&lt;/td&gt;
&lt;td&gt;Success but no response body&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  🔥 Examples
&lt;/h3&gt;



&lt;p&gt;```http id="hwl2wr"&lt;br&gt;
GET /users → 200 OK&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;




```http id="tsmz92"
POST /users → 201 Created
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;p&gt;```http id="21npr6"&lt;br&gt;
DELETE /users/4 → 204 No Content&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


---

# ✅ 3xx — REDIRECTION

| Code | Meaning                    |
| ---- | -------------------------- |
| 301  | Moved Permanently          |
| 302  | Found (temporary redirect) |
| 304  | Not Modified               |

👉 Mostly browser-related, not common in API testing

---

# ✅ 4xx — CLIENT ERRORS (VERY IMPORTANT)

👉 Problem from **user/request side**

| Code | Meaning              | Example            |
| ---- | -------------------- | ------------------ |
| 400  | Bad Request          | Missing JSON field |
| 401  | Unauthorized         | No login/token     |
| 403  | Forbidden            | No permission      |
| 404  | Not Found            | Wrong URL or ID    |
| 405  | Method Not Allowed   | Wrong HTTP method  |
| 409  | Conflict             | Duplicate data     |
| 422  | Unprocessable Entity | Validation failed  |

---

### 🔥 Examples



```http id="33rrv1"
GET /users/999 → 404 Not Found
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;p&gt;```http id="9flkqn"&lt;br&gt;
POST without body → 400 Bad Request&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


---

# ✅ 5xx — SERVER ERRORS (VERY IMPORTANT)

👉 Problem from **backend/server**

| Code | Meaning               |
| ---- | --------------------- |
| 500  | Internal Server Error |
| 502  | Bad Gateway           |
| 503  | Service Unavailable   |
| 504  | Gateway Timeout       |

---

### 🔥 Examples



```http id="2lm9mt"
Database crash → 500
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;p&gt;```http id="d4bf3k"&lt;br&gt;
Server overloaded → 503&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


---

# 🔥 WHAT YOU SHOULD USE IN YOUR API

### Your current backend:

#### GET



```js id="tj9xjs"
res.json(users);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;👉 Returns:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;200 OK
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h4&gt;
  
  
  POST
&lt;/h4&gt;



&lt;p&gt;```js id="hcn8wp"&lt;br&gt;
res.status(201).json(newUser);&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


👉 Correct:



```id="kxj6h8"
201 Created
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  PUT
&lt;/h4&gt;



&lt;p&gt;```js id="c3yo0x"&lt;br&gt;
res.json(user);&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


👉 Should be:



```id="h9n83j"
200 OK
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  DELETE
&lt;/h4&gt;

&lt;p&gt;Right now:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;```js id="bzgk4x"&lt;br&gt;
res.send("User deleted");&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


👉 Better (production):



```js id="2p5b6q"
res.status(204).send();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  🔥 INTERVIEW ANSWERS (IMPORTANT)
&lt;/h1&gt;

&lt;h3&gt;
  
  
  ❓ What status code for POST?
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;201 Created&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  ❓ What status code if user not found?
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;404 Not Found&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  ❓ What status code for server error?
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;500 Internal Server Error&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  ❓ What status code for successful GET?
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;200 OK&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  🔥 DEVOPS VIEW
&lt;/h1&gt;

&lt;p&gt;You monitor APIs using status codes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;200 → healthy&lt;/li&gt;
&lt;li&gt;4xx → client issue&lt;/li&gt;
&lt;li&gt;5xx → system failure (critical alert)&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  🔥 QUICK CHEAT SHEET
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;200 → OK
201 → Created
204 → No Content
400 → Bad Request
401 → Unauthorized
403 → Forbidden
404 → Not Found
500 → Server Error
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>lab: how frontend and backend communicate</title>
      <dc:creator>Aisalkyn Aidarova</dc:creator>
      <pubDate>Sat, 11 Apr 2026 14:54:26 +0000</pubDate>
      <link>https://forem.com/jumptotech/lab-how-frontend-and-backend-communicate-12b7</link>
      <guid>https://forem.com/jumptotech/lab-how-frontend-and-backend-communicate-12b7</guid>
      <description>&lt;p&gt;Build a small user application:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Browser opens frontend from &lt;strong&gt;S3 static website&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Frontend sends HTTP requests to &lt;strong&gt;backend on EC2&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Backend returns JSON&lt;/li&gt;
&lt;li&gt;You test API with &lt;strong&gt;Postman&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;You automate tests with &lt;strong&gt;Newman&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Architecture
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User Browser
    |
    v
S3 Static Frontend
    |
    | HTTP request
    v
EC2 Backend API (Node.js / Express)
    |
    v
JSON Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  What You Will Learn
&lt;/h1&gt;

&lt;h2&gt;
  
  
  API
&lt;/h2&gt;

&lt;p&gt;An API is a way for one system to talk to another.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;frontend asks backend: “give me users”&lt;/li&gt;
&lt;li&gt;backend sends JSON back&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  HTTP
&lt;/h2&gt;

&lt;p&gt;HTTP is the communication protocol used between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;browser and server&lt;/li&gt;
&lt;li&gt;frontend and backend&lt;/li&gt;
&lt;li&gt;Postman and backend&lt;/li&gt;
&lt;li&gt;Newman and backend&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Methods
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GET&lt;/strong&gt; = read data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;POST&lt;/strong&gt; = create data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PUT&lt;/strong&gt; = update data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DELETE&lt;/strong&gt; = remove data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These methods exist so systems can clearly say what action they want.&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Project Structure
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aws-api-lab/
├── backend/
│   ├── server.js
│   ├── package.json
│   └── Dockerfile
├── frontend/
│   └── index.html
├── postman/
│   └── collection.json
└── README-commands.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Part 1 — Backend API
&lt;/h1&gt;

&lt;h2&gt;
  
  
  1. Create &lt;code&gt;backend/package.json&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"aws-api-lab"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Simple API lab for DevOps engineers"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"main"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"server.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"node server.js"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"cors"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^2.8.5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"express"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^4.19.2"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. Create &lt;code&gt;backend/server.js&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cors&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;PORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;cors&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Aisalkyn&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;DevOps Student&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="c1"&gt;// Health check&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/health&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ok&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// GET - Read all users&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/users&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// GET - Read one user&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/users/:id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;u&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User not found&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// POST - Create user&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/users&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Name is required&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;newUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newUser&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;201&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newUser&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// PUT - Update user&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/users/:id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;u&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User not found&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="k"&gt;typeof&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;string&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Name is required&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// DELETE - Remove user&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/users/:id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;existingLength&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nx"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;u&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;existingLength&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User not found&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User deleted&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0.0.0.0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Server is running on http://0.0.0.0:&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This code is simple and working. It includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;validation&lt;/li&gt;
&lt;li&gt;proper status codes&lt;/li&gt;
&lt;li&gt;health endpoint&lt;/li&gt;
&lt;li&gt;all major HTTP methods&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. Create &lt;code&gt;backend/Dockerfile&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:20-alpine&lt;/span&gt;

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; package.json ./&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; server.js ./&lt;/span&gt;

&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 3000&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["npm", "start"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Part 2 — Frontend
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Create &lt;code&gt;frontend/index.html&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Important: later you will replace &lt;code&gt;YOUR-EC2-PUBLIC-IP&lt;/code&gt; with your real EC2 public IP.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;AWS API Lab&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;AWS API Lab&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This frontend is hosted on S3 and talks to backend on EC2.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"getUsers()"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Get Users&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"createUser()"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Create User&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Users&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;pre&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"output"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/pre&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;API_BASE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;http://YOUR-EC2-PUBLIC-IP:3000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getUsers&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;API_BASE_URL&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/users`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;output&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;output&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Error: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;createUser&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;API_BASE_URL&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/users`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
          &lt;span class="p"&gt;},&lt;/span&gt;
          &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;New AWS User&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt;

        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;output&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;output&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Error: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Part 3 — Postman Collection
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Create &lt;code&gt;postman/collection.json&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Replace &lt;code&gt;YOUR-EC2-PUBLIC-IP&lt;/code&gt; before running.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"info"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AWS API Lab Collection"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"schema"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://schema.getpostman.com/json/collection/v2.1.0/collection.json"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"item"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Health Check"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GET"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"header"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"raw"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://YOUR-EC2-PUBLIC-IP:3000/health"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"protocol"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"host"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"YOUR-EC2-PUBLIC-IP"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"port"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3000"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"health"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Get Users"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GET"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"header"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"raw"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://YOUR-EC2-PUBLIC-IP:3000/users"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"protocol"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"host"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"YOUR-EC2-PUBLIC-IP"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"port"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3000"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"users"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Create User"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"POST"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"header"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Content-Type"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"application/json"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"body"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"raw"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"raw"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;  &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;Postman User&lt;/span&gt;&lt;span class="se"&gt;\"\n&lt;/span&gt;&lt;span class="s2"&gt;}"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"raw"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://YOUR-EC2-PUBLIC-IP:3000/users"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"protocol"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"host"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"YOUR-EC2-PUBLIC-IP"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"port"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3000"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"users"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Update User"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"PUT"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"header"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Content-Type"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"application/json"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"body"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"raw"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"raw"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;  &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;Updated User&lt;/span&gt;&lt;span class="se"&gt;\"\n&lt;/span&gt;&lt;span class="s2"&gt;}"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"raw"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://YOUR-EC2-PUBLIC-IP:3000/users/1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"protocol"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"host"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"YOUR-EC2-PUBLIC-IP"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"port"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3000"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"users"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Delete User"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DELETE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"header"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"raw"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://YOUR-EC2-PUBLIC-IP:3000/users/2"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"protocol"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"host"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"YOUR-EC2-PUBLIC-IP"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"port"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3000"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"users"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Part 4 — AWS Setup
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Step 1: Launch EC2
&lt;/h2&gt;

&lt;p&gt;Create one EC2 instance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ubuntu&lt;/li&gt;
&lt;li&gt;t2.micro or t3.micro&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;allow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SSH 22 from your IP&lt;/li&gt;
&lt;li&gt;Custom TCP 3000 from anywhere for this lab&lt;/li&gt;
&lt;li&gt;or HTTP 80 if you later use Nginx reverse proxy&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;For this simple lab, open:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;port 22&lt;/li&gt;
&lt;li&gt;port 3000&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step 2: Connect to EC2
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-i&lt;/span&gt; your-key.pem ubuntu@YOUR-EC2-PUBLIC-IP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 3: Install Docker on EC2
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; docker.io
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;docker
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start docker
&lt;span class="nb"&gt;sudo &lt;/span&gt;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; docker ubuntu
newgrp docker
docker &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 4: Upload backend files to EC2
&lt;/h2&gt;

&lt;p&gt;From your local machine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;scp &lt;span class="nt"&gt;-i&lt;/span&gt; your-key.pem &lt;span class="nt"&gt;-r&lt;/span&gt; backend ubuntu@YOUR-EC2-PUBLIC-IP:/home/ubuntu/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 5: Build and run backend on EC2
&lt;/h2&gt;

&lt;p&gt;SSH into EC2 and run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /home/ubuntu/backend
docker build &lt;span class="nt"&gt;-t&lt;/span&gt; aws-api-lab &lt;span class="nb"&gt;.&lt;/span&gt;
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; api &lt;span class="nt"&gt;-p&lt;/span&gt; 3000:3000 aws-api-lab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps
curl http://localhost:3000/health
curl http://localhost:3000/users
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From your own laptop, also check:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://YOUR-EC2-PUBLIC-IP:3000/health
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should get:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"ok"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Part 5 — Host Frontend on S3
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Step 1: Create S3 bucket
&lt;/h2&gt;

&lt;p&gt;Create an S3 bucket with a globally unique name, for example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aisalkyn-aws-api-lab-frontend
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 2: Enable static website hosting
&lt;/h2&gt;

&lt;p&gt;In S3 bucket:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;go to Properties&lt;/li&gt;
&lt;li&gt;enable Static website hosting&lt;/li&gt;
&lt;li&gt;index document: &lt;code&gt;index.html&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step 3: Upload &lt;code&gt;frontend/index.html&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Before uploading, replace:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//YOUR-EC2-PUBLIC-IP:3000&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;with your real IP.&lt;/p&gt;

&lt;p&gt;Then upload the file.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: Make objects public
&lt;/h2&gt;

&lt;p&gt;For a simple lab:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;disable block public access for this bucket&lt;/li&gt;
&lt;li&gt;allow read access to objects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sample bucket policy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Sid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"PublicReadForWebsite"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Principal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"s3:GetObject"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:s3:::YOUR-BUCKET-NAME/*"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace &lt;code&gt;YOUR-BUCKET-NAME&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5: Open S3 website URL
&lt;/h2&gt;

&lt;p&gt;Now open the static website endpoint from S3.&lt;/p&gt;

&lt;p&gt;When you click:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Get Users&lt;/strong&gt; → frontend sends GET request to EC2 backend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create User&lt;/strong&gt; → frontend sends POST request to EC2 backend&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the full frontend-to-backend flow.&lt;/p&gt;




&lt;h1&gt;
  
  
  Part 6 — Test with Postman
&lt;/h1&gt;

&lt;p&gt;In Postman, use your EC2 public IP.&lt;/p&gt;

&lt;h2&gt;
  
  
  Health
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET http://YOUR-EC2-PUBLIC-IP:3000/health
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Get all users
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET http://YOUR-EC2-PUBLIC-IP:3000/users
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Create
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST http://YOUR-EC2-PUBLIC-IP:3000/users
Content-Type: application/json

{
  "name": "Aisalkyn API Student"
}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Update
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;PUT http://YOUR-EC2-PUBLIC-IP:3000/users/1
Content-Type: application/json

{
  "name": "Updated Name"
}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Delete
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;DELETE http://YOUR-EC2-PUBLIC-IP:3000/users/1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Part 7 — Run with Newman
&lt;/h1&gt;

&lt;p&gt;Install Newman on your laptop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; newman
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;postman
newman run collection.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is how DevOps engineers automate API checks.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why Each HTTP Method Works
&lt;/h1&gt;

&lt;h2&gt;
  
  
  GET
&lt;/h2&gt;

&lt;p&gt;Used to read information.&lt;br&gt;
It does not usually change data.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /users
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  POST
&lt;/h2&gt;

&lt;p&gt;Used to create new data.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /users
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Body:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"New User"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  PUT
&lt;/h2&gt;

&lt;p&gt;Used to update existing data.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;PUT /users/1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  DELETE
&lt;/h2&gt;

&lt;p&gt;Used to remove data.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;DELETE /users/1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These methods matter because backend code behaves differently depending on the request type.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why HTTP Is There
&lt;/h1&gt;

&lt;p&gt;HTTP is there because systems need a standard language for communication.&lt;/p&gt;

&lt;p&gt;Without HTTP:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;browser would not know how to ask server for data&lt;/li&gt;
&lt;li&gt;Postman would not know how to test endpoint&lt;/li&gt;
&lt;li&gt;frontend would not know how to send create/update/delete actions&lt;/li&gt;
&lt;li&gt;backend would not know how to interpret request type&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;HTTP gives structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;method&lt;/li&gt;
&lt;li&gt;URL&lt;/li&gt;
&lt;li&gt;headers&lt;/li&gt;
&lt;li&gt;body&lt;/li&gt;
&lt;li&gt;response code&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Important DevOps Understanding
&lt;/h1&gt;

&lt;p&gt;A DevOps engineer does not always write large applications, but must understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;where frontend is hosted&lt;/li&gt;
&lt;li&gt;where backend is running&lt;/li&gt;
&lt;li&gt;how requests reach backend&lt;/li&gt;
&lt;li&gt;what ports are open&lt;/li&gt;
&lt;li&gt;what security groups allow traffic&lt;/li&gt;
&lt;li&gt;how to test health and endpoints&lt;/li&gt;
&lt;li&gt;how to automate checks with Newman&lt;/li&gt;
&lt;li&gt;how to troubleshoot if app fails&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Common Problems and Fixes
&lt;/h1&gt;

&lt;h2&gt;
  
  
  1. Frontend opens but cannot reach backend
&lt;/h2&gt;

&lt;p&gt;Usually:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;EC2 security group does not allow port 3000&lt;/li&gt;
&lt;li&gt;wrong EC2 public IP in frontend file&lt;/li&gt;
&lt;li&gt;backend container is not running&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps
curl http://localhost:3000/health
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. Browser shows CORS error
&lt;/h2&gt;

&lt;p&gt;You already included:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;cors&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That fixes most basic CORS problems for this lab.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Newman says request URL is empty
&lt;/h2&gt;

&lt;p&gt;That usually means collection JSON does not contain full URL, or placeholder was not replaced.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Port 3000 not reachable
&lt;/h2&gt;

&lt;p&gt;Check EC2 security group inbound rules.&lt;/p&gt;




&lt;h1&gt;
  
  
  Commands Summary
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Local backend test
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;backend
npm &lt;span class="nb"&gt;install
&lt;/span&gt;node server.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Docker local
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; aws-api-lab &lt;span class="nb"&gt;.&lt;/span&gt;
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 3000:3000 aws-api-lab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  EC2 Docker
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /home/ubuntu/backend
docker build &lt;span class="nt"&gt;-t&lt;/span&gt; aws-api-lab &lt;span class="nb"&gt;.&lt;/span&gt;
docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;--name&lt;/span&gt; api &lt;span class="nt"&gt;-p&lt;/span&gt; 3000:3000 aws-api-lab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Health check
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://YOUR-EC2-PUBLIC-IP:3000/health
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Newman
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;newman run collection.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Interview Value
&lt;/h1&gt;

&lt;p&gt;This lab helps you answer questions like:&lt;/p&gt;

&lt;h2&gt;
  
  
  What is an API?
&lt;/h2&gt;

&lt;p&gt;An API allows systems like frontend, Postman, or other services to communicate with backend using HTTP requests and responses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do we use GET, POST, PUT, DELETE?
&lt;/h2&gt;

&lt;p&gt;Because each method represents a different type of action on the resource: read, create, update, and delete.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does a DevOps engineer check here?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;backend availability&lt;/li&gt;
&lt;li&gt;port accessibility&lt;/li&gt;
&lt;li&gt;health endpoint&lt;/li&gt;
&lt;li&gt;status codes&lt;/li&gt;
&lt;li&gt;request/response correctness&lt;/li&gt;
&lt;li&gt;frontend-to-backend connectivity&lt;/li&gt;
&lt;li&gt;automated testing with Newman&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>LAB: DevOps API Pipeline</title>
      <dc:creator>Aisalkyn Aidarova</dc:creator>
      <pubDate>Sat, 11 Apr 2026 14:01:06 +0000</pubDate>
      <link>https://forem.com/jumptotech/lab-devops-api-pipeline-2879</link>
      <guid>https://forem.com/jumptotech/lab-devops-api-pipeline-2879</guid>
      <description>&lt;h2&gt;
  
  
  What You Will Learn
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;How DevOps runs API tests in pipeline&lt;/li&gt;
&lt;li&gt;How Docker is used&lt;/li&gt;
&lt;li&gt;How CI/CD validates backend before deploy&lt;/li&gt;
&lt;li&gt;Real workflow used in companies&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  1. PROJECT STRUCTURE
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;devops-api-pipeline/
├── backend/
│   ├── server.js
│   ├── package.json
│   └── Dockerfile
├── postman/
│   └── collection.json
├── .github/
│   └── workflows/
│       └── api-test.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  2. BACKEND (same logic, slightly improved)
&lt;/h1&gt;

&lt;h2&gt;
  
  
  backend/server.js
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;John&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="c1"&gt;// HEALTH CHECK (important in DevOps)&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/health&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;OK&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;newUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newUser&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;201&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newUser&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Server running on port 3000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  backend/package.json
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"devops-api"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1.0.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"main"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"server.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"start"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"node server.js"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dependencies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"express"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^4.18.2"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  3. DOCKER (IMPORTANT)
&lt;/h1&gt;

&lt;h2&gt;
  
  
  backend/Dockerfile
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:18&lt;/span&gt;

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; package.json .&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;

&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 3000&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["npm", "start"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Build &amp;amp; Run locally
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;backend

docker build &lt;span class="nt"&gt;-t&lt;/span&gt; devops-api &lt;span class="nb"&gt;.&lt;/span&gt;
docker run &lt;span class="nt"&gt;-p&lt;/span&gt; 3000:3000 devops-api
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Test:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:3000/health
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  4. POSTMAN COLLECTION (REAL TESTS)
&lt;/h1&gt;

&lt;h2&gt;
  
  
  postman/collection.json
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"info"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DevOps API Pipeline"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"schema"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://schema.getpostman.com/json/collection/v2.1.0/collection.json"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"item"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Health Check"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GET"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:3000/health"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Get Users"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GET"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:3000/users"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Create User"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"POST"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"header"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Content-Type"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"application/json"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"body"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"raw"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"raw"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{ &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;CI User&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; }"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:3000/users"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  5. CI/CD PIPELINE
&lt;/h1&gt;

&lt;h2&gt;
  
  
  .github/workflows/api-test.yml
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;API Test Pipeline&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;main"&lt;/span&gt; &lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;test-api&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;

    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Checkout code&lt;/span&gt;
      &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v3&lt;/span&gt;

    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build Docker image&lt;/span&gt;
      &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;docker build -t devops-api ./backend&lt;/span&gt;

    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run container&lt;/span&gt;
      &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
        &lt;span class="s"&gt;docker run -d -p 3000:3000 --name api devops-api&lt;/span&gt;
        &lt;span class="s"&gt;sleep 5&lt;/span&gt;

    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Install Newman&lt;/span&gt;
      &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm install -g newman&lt;/span&gt;

    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Run API tests&lt;/span&gt;
      &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;newman run postman/collection.json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  6. HOW THIS WORKS (IMPORTANT)
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Step-by-step:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Code pushed to GitHub&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Actions&lt;/strong&gt; triggers pipeline&lt;/li&gt;
&lt;li&gt;Docker builds app&lt;/li&gt;
&lt;li&gt;Container runs API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Newman&lt;/strong&gt; tests endpoints&lt;/li&gt;
&lt;li&gt;If tests fail → pipeline FAILS&lt;/li&gt;
&lt;/ol&gt;




&lt;h1&gt;
  
  
  7. WHY THIS IS REAL DEVOPS
&lt;/h1&gt;

&lt;p&gt;This is exactly what companies do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Validate API before deployment&lt;/li&gt;
&lt;li&gt;Prevent broken code in production&lt;/li&gt;
&lt;li&gt;Automate testing&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  8. ADDITIONAL IMPROVEMENTS (REAL WORLD)
&lt;/h1&gt;

&lt;p&gt;You can extend:&lt;/p&gt;

&lt;h3&gt;
  
  
  Add assertions in Postman
&lt;/h3&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Status is 200&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;function &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;to&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;have&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Add environment variables
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{{base_url}}/users"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Add Docker push (ECR / GHCR)
&lt;/h3&gt;




&lt;h1&gt;
  
  
  9. INTERVIEW ANSWERS
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Q: How do you test APIs in CI/CD?&lt;/strong&gt;&lt;br&gt;
→ Using Postman collections executed via Newman inside pipeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Why Docker here?&lt;/strong&gt;&lt;br&gt;
→ To ensure same environment everywhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What if API fails?&lt;/strong&gt;&lt;br&gt;
→ Pipeline stops → deployment blocked.&lt;/p&gt;




&lt;h1&gt;
  
  
  10. WHAT YOU JUST BUILT
&lt;/h1&gt;

&lt;p&gt;You built:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API&lt;/li&gt;
&lt;li&gt;Docker image&lt;/li&gt;
&lt;li&gt;Automated testing pipeline&lt;/li&gt;
&lt;li&gt;Real DevOps workflow&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>LAB: Build + Test API (Full Flow)</title>
      <dc:creator>Aisalkyn Aidarova</dc:creator>
      <pubDate>Sat, 11 Apr 2026 13:59:21 +0000</pubDate>
      <link>https://forem.com/jumptotech/lab-build-test-api-full-flow-1n4m</link>
      <guid>https://forem.com/jumptotech/lab-build-test-api-full-flow-1n4m</guid>
      <description>&lt;h2&gt;
  
  
  What You Will Learn
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;How API receives HTTP requests&lt;/li&gt;
&lt;li&gt;How frontend talks to backend&lt;/li&gt;
&lt;li&gt;How DevOps tests APIs&lt;/li&gt;
&lt;li&gt;Why GET / POST / PUT / DELETE exist&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  1. PROJECT STRUCTURE
&lt;/h1&gt;

&lt;p&gt;Create folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;devops-api-lab/
├── backend/
│   └── server.js
├── frontend/
│   └── index.html
├── postman/
│   └── collection.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  2. BACKEND (API SERVER)
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Install Node.js
&lt;/h2&gt;

&lt;p&gt;Download from: Node.js&lt;/p&gt;




&lt;h2&gt;
  
  
  Create &lt;code&gt;backend/server.js&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;express&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="c1"&gt;// Fake database&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;John&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="c1"&gt;// GET (READ)&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// POST (CREATE)&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;newUser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newUser&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;201&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newUser&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// PUT (UPDATE)&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/users/:id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;u&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User not found&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// DELETE (REMOVE)&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/users/:id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;users&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;users&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;u&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User deleted&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Server running on http://localhost:3000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Install dependencies
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;backend
npm init &lt;span class="nt"&gt;-y&lt;/span&gt;
npm &lt;span class="nb"&gt;install &lt;/span&gt;express
node server.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  3. FRONTEND (UI)
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Create &lt;code&gt;frontend/index.html&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;DevOps API Lab&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Users&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"getUsers()"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Get Users&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"addUser()"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Add User&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;ul&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"list"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getUsers&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http://localhost:3000/users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;list&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;li&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;li&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;li&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;li&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;addUser&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http://localhost:3000/users&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;New User&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="nf"&gt;getUsers&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Run frontend
&lt;/h2&gt;

&lt;p&gt;Just open file in browser:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;frontend/index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  4. WHAT IS HAPPENING (IMPORTANT)
&lt;/h1&gt;

&lt;h2&gt;
  
  
  HTTP FLOW
&lt;/h2&gt;

&lt;h3&gt;
  
  
  GET
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /users
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Used to &lt;strong&gt;READ data&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;No body&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  POST
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST /users
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Used to &lt;strong&gt;CREATE&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Sends JSON body&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  PUT
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;PUT /users/1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Used to &lt;strong&gt;UPDATE&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  DELETE
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;DELETE /users/1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Used to &lt;strong&gt;REMOVE&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  WHY HTTP EXISTS
&lt;/h2&gt;

&lt;p&gt;HTTP is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Standard communication protocol&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Used between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Browser → Backend&lt;/li&gt;
&lt;li&gt;Frontend → API&lt;/li&gt;
&lt;li&gt;DevOps tools → Services&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h1&gt;
  
  
  5. TEST WITH POSTMAN
&lt;/h1&gt;

&lt;p&gt;Open &lt;strong&gt;Postman&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Create requests:
&lt;/h3&gt;

&lt;h3&gt;
  
  
  GET
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET http://localhost:3000/users
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  POST
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST http://localhost:3000/users
Body:
{
  "name": "DevOps User"
}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  PUT
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;PUT http://localhost:3000/users/1
Body:
{
  "name": "Updated User"
}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  DELETE
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;DELETE http://localhost:3000/users/1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  6. AUTOMATION WITH NEWMAN
&lt;/h1&gt;

&lt;p&gt;Install:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; newman
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Create &lt;code&gt;postman/collection.json&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"info"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DevOps API Lab"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"schema"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://schema.getpostman.com/json/collection/v2.1.0/collection.json"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"item"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Get Users"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GET"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:3000/users"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Create User"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"method"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"POST"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"header"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Content-Type"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"application/json"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"body"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"mode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"raw"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"raw"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{ &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;Newman User&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt; }"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:3000/users"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Run Newman
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;postman
newman run collection.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  7. REAL DEVOPS CONNECTION
&lt;/h1&gt;

&lt;p&gt;This lab simulates real work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CI/CD pipeline runs Newman tests&lt;/li&gt;
&lt;li&gt;Backend deployed on AWS EC2 / ECS&lt;/li&gt;
&lt;li&gt;Frontend hosted on S3&lt;/li&gt;
&lt;li&gt;DevOps validates API before deployment&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  8. INTERVIEW ANSWER (SHORT)
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Q: What is API?&lt;/strong&gt;&lt;br&gt;
API allows communication between frontend and backend using HTTP methods.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Why GET vs POST?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GET → fetch data&lt;/li&gt;
&lt;li&gt;POST → create data&lt;/li&gt;
&lt;li&gt;PUT → update&lt;/li&gt;
&lt;li&gt;DELETE → remove&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Q: What do DevOps test?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API availability&lt;/li&gt;
&lt;li&gt;Response correctness&lt;/li&gt;
&lt;li&gt;Status codes&lt;/li&gt;
&lt;li&gt;Performance&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
  </channel>
</rss>
