Skip to main content

Command Palette

Search for a command to run...

Web Architecture Fundamentals

Updated
6 min read
Web Architecture Fundamentals

Part 1: Understanding Client-Server Architecture — The Foundation of Modern Applications

Whenever we open a web application, watch a video online, send a message, or purchase a product, we interact with a system built on one of the most fundamental concepts in software engineering: Client-Server Architecture.

Despite powering nearly every modern application, many developers work with it daily without fully understanding what happens behind the scenes.

Before diving into distributed systems, microservices, load balancers, caching, or cloud infrastructure, it's important to understand the architectural foundation upon which all modern systems are built.

Let's explore Client-Server Architecture through a practical example.


What is Client-Server Architecture?

Client-Server Architecture is a software design model where responsibilities are divided between two components:

Client

The client is responsible for:

  • Accepting user input

  • Displaying information

  • Sending requests

Examples:

  • Web browsers

  • Mobile applications

  • Desktop applications

Server

The server is responsible for:

  • Processing requests

  • Executing business logic

  • Accessing databases

  • Returning responses

Examples:

  • Spring Boot applications

  • Node.js applications

  • ASP.NET services

At a high level:

Client  ----Request---->  Server
Client  <---Response----  Server

The client asks for something.

The server processes the request and responds.

This simple interaction powers almost every application we use today.


A Real-World Analogy

Think of a restaurant.

Customer (Client)

The customer:

  • Reads the menu

  • Places an order

  • Waits for food

Kitchen (Server)

The kitchen:

  • Receives the order

  • Prepares the food

  • Sends it back

The customer never enters the kitchen.

The kitchen never sits at the customer table.

Each component has a specific responsibility.

Client-Server Architecture follows the same principle.


A Practical Example: Viewing Courses on an Online Learning Platform

Imagine a user opens an online learning platform and wants to view available courses.

Step 1: User Opens the Application

The browser loads the frontend application.

User
 ↓
Browser

At this stage, the browser only displays the user interface.

It does not contain the actual course data.


Step 2: Client Sends a Request

The frontend requests course information from the backend.

fetch("/api/courses")
    .then(response => response.json())
    .then(data => console.log(data));

The browser becomes the client.

The backend becomes the server.

Browser
    |
    | Request
    v
Server

Step 3: Server Processes the Request

The backend receives:

GET /api/courses

A Spring Boot controller may look like:

@RestController
@RequestMapping("/api/courses")
public class CourseController {

    @GetMapping
    public List<Course> getCourses() {
        return courseService.getAllCourses();
    }
}

The server now handles the request.


Step 4: Server Communicates with the Database

The backend needs data.

It queries the database.

SELECT *
FROM courses;

The database returns the records.

Database
    ↓
Course Data
    ↓
Backend Server

Step 5: Response Returned to Client

The server converts the data into JSON.

[
  {
    "id": 1,
    "title": "Java Fundamentals"
  },
  {
    "id": 2,
    "title": "Spring Boot Development"
  }
]

The response travels back to the browser.

Server
   |
Response
   |
   v
Browser

Step 6: Client Displays the Data

The browser receives the response.

The frontend renders the courses on screen.

From the user's perspective:

Open Application
↓
Courses Appear

From the system's perspective:

User
 ↓
Browser
 ↓
Backend Server
 ↓
Database
 ↓
Backend Server
 ↓
Browser
 ↓
User

This is the essence of Client-Server Architecture.


Why Do We Need Client-Server Architecture?

Imagine storing all application logic and data inside the browser.

Problems would quickly emerge:

Security Risks

Users could access sensitive data.

Difficult Maintenance

Every update would require distributing new application versions.

Data Inconsistency

Each user could have different copies of data.

Poor Scalability

Managing data across thousands of devices becomes impossible.

Separating responsibilities solves these problems.


Benefits of Client-Server Architecture

Centralized Data Management

Data lives on the server.

All users access the same source of truth.

Better Security

Sensitive logic remains on the server.

Passwords and business rules are protected.

Easier Maintenance

Backend updates can be deployed without requiring user intervention.

Scalability

Additional servers can be added as traffic grows.

This becomes the foundation for larger system design concepts.


How Modern Applications Use Client-Server Architecture

Most modern applications follow a layered model.

+---------------------+
|      Browser        |
+---------------------+
          |
          v
+---------------------+
|      Frontend       |
| React / Angular     |
+---------------------+
          |
          v
+---------------------+
|      Backend        |
| Spring Boot         |
+---------------------+
          |
          v
+---------------------+
|      Database       |
| PostgreSQL          |
+---------------------+

As systems grow, additional layers are introduced:

  • Load Balancers

  • API Gateways

  • Cache Layers

  • Message Queues

  • Microservices

But every advanced architecture still relies on the same client-server communication pattern.


Common Misconceptions

"The Frontend Talks Directly to the Database"

In production systems, this is generally avoided.

The frontend should communicate with APIs, not databases.

"Client Means Browser Only"

Not true.

A client can be:

  • Mobile application

  • Desktop software

  • Smart TV application

  • IoT device

"Server Means One Physical Machine"

Not necessarily.

A server may represent multiple machines working together.


Key Takeaways

Client-Server Architecture is one of the most important concepts in software engineering.

Every modern application depends on it.

Understanding how clients request information and how servers process and return responses provides the foundation for learning:

  • HTTP and HTTPS

  • REST APIs

  • Authentication

  • API Gateways

  • Load Balancers

  • Microservices

  • Distributed Systems

Before designing systems that handle millions of users, we must first understand how a single client communicates with a server.

Every scalable architecture begins with this simple interaction.


Next Article

In the next article, we'll explore how clients and servers communicate using HTTP and HTTPS, and why these protocols form the backbone of the modern web.


Master System Design with Java

Part 1 of 2

A complete beginner-to-advanced journey into System Design using Java. Learn how modern applications are built and scaled through practical examples, real-world architectures, design patterns, microservices, databases, caching, messaging systems, cloud deployment, and hands-on implementation with Spring Boot. Perfect for software engineers, Java developers, and aspiring system architects.

Up next

Web Architecture Fundamentals

Part 2: Why HTTP Status Codes Matter More Than Most Developers Think Imagine clicking the Login button on an application. You enter your email. You enter your password. You click Submit. What happens