개발지식 먹는 하마 님의 블로그

웹 서비스 구조 및 흐름을 비유와 함께 이해하기 본문

Web

웹 서비스 구조 및 흐름을 비유와 함께 이해하기

devhippo 2025. 3. 20. 18:57

웹 서비스의 전체적인 구조와 관계, 흐름, 각 요소의 역할을 좀 더 쉽게 이해하고 떠올릴 수 있도록
특정 상황에 비유해 정리하였다.

일부 내용은 간략화를 위해 생략되었고 별도의 글에 자세히 정리하였다.

⚙️ Web Service

웹을 통해 클라이언트와 서버가 HTTP 기반으로 데이터를 주고받으며 동작하는 서비스

웹 서비스 구조는 우리가 일상 생활에서 흔히 볼 수 있는 가게 운영 시스템과 굉장히 유사하다.
다만, 일하는 직원이 전자기기 또는 어떤 개념으로 대체될 뿐이다.


📌클라이언트 - 서버 간 통신

프로토콜에 따라 클라이언트와 서버를 연결하고 데이터를 전송한다.

 

클라이언트와 웹 서버 간의 연결

서로 다른 공간에 있는 고객과 가게는 인터넷으로 연결 되어있다.

IP는 데이터 패킷을 목적지까지 전달하는 배달기사다.
IP 주소와 Port 번호(동호수 같은 역할)로 데이터 패킷을 전송한다.  

이 때, TCP와 UDP와 같은 전송 계층 프로토콜은 배달 방식을 정한다.

TCP와 UDP의 차이를 비유

TCP는 조금 느리지만 신뢰성을 보장하고, UDP는 신뢰성은 낮지만 빠르다.  
https://devhippo.tistory.com/92

 

TCP와 UDP

인터넷상에서는 데이터를 안전하게 전달하기 위한 규칙이 있다.이를 전송 계층 프로토콜이라고 한다. 대표적인 전송 계층 프로토콜에는 TCP와 UDP가 있다.두 방법의 가장 큰 차이는 신뢰성을 고

devhippo.tistory.com

 

이 때, 데이터 패킷은 HTTP Message를 포함하고 있다.
클라이언트는 요청 메세지를 전송하고, 서버는 응답 메세지를 전송한다.
https://devhippo.tistory.com/93

 

HTTP Message

📌 HTTP ( HyperText Transfer Protocol )웹에서 데이터를 주고받기 위한 프로토콜요청과 응답을 주고받는다.✅ 무상태성(Stateless)서버는 클라이언트의 이전 요청 정보를 저장하지 않음이를 보완하기 위

devhippo.tistory.com

 

HTTP Message는 API에서 요구하는 양식에 따라 작성된다.
(API는 데이터를 주고 받는 모든 영역에서 사용된다.)

https://devhippo.tistory.com/58

 

REST API와 RESTful API

API애플리케이션이 서로 통신할 수 있도록 해주는 인터페이스이다.문서 양식이라고 생각하면 이해하기 쉽다.이렇게 요청서를 작성해서 넘겨주면 그에 따라서 필요한 걸 드릴게요!라고 양식에

devhippo.tistory.com


📌Request Message를 받은 Web Server

웹 서버 내부의 일부

주문을 받은 가게는 해당 주문 제품이 완제품(Static Resourse)이면 즉시 이를 배송한다.

만약 완제품이 아닌 조리품이면 내부(WAS)에서 이를 처리한다.
WAS의 직원인 Thread는 받은 주문을 카운터(Servlet)로 들고 간다.

 

🟩 Web Server

HTTP 기반으로 Static Resource(HTML, CSS, JS, 이미지 등)를 제공한다.

대표적인 Web Server로는 Apache와 NGINX가 있다.
둘 모두 따로 호환되는 WAS가 정해져있지는 않다.

 

🟩 Web Application Server

HTTP 기반으로 동작한다. 
Application 로직을 수행하고 DB와 상호작용하여 동적 컨텐츠를 생성한다.

대표적인 WAS로는 Tomcat, Jetty, Undertow가 있다.

Web Server와 Web Application Server는 ScaleOut해 효율적으로 리소스를 관리할 수 있다.
요청에 따라 Thread가 실행되고, Thread는 Servlet 객체를 호출한다.


 

📌Thread의 호출을 받은 Servlet

카운터 Servlet 주문서를 분석, 제품 포장, 배달 요청 등 잡다한 업무들을 처리한다.

다만, Servlet의 업무가 너무 과중했다.
따라서 Servlet의 업무를 분담하기 위해 MVC 패턴을 사용하기로 했다.

//Servlet을 정리한 글 첨부 예정

 

🟩 MVC 패턴

Controller는 요청을 분석 및 분배한다.
Model은 View에 출력할 Data를 저장한다.
View는 Data를 잘 포장한다.
 = View는 Thymeleaf나 JSP와 같은 도구를 사용해 동적으로 HTML을 생성한다.

최근 JSP는 잘 쓰이지 않는 추세이다.

//MVC 패턴 정리글 첨부 예정

🟩 Layered Architecture

MVC 패턴을 사용해도 여전히 Controller의 역할이 너무 많다.
따라서 Controller의 내부를 Layered Architecture로 나눠서 한 번 더 역할을 분배한다.

🟦 Presentation Layer

사용자의 요청을 받고 응답하는 역할을 수행한다.

🟦 Business Layer(Service Layer)

비지니스 로직을 수행한다.

🟦 Repository Layer

DB와 상호작용하며 실제 데이터를 관리한다.

🟦 Persistence Layer

DBMS는 DB를 관리 및 운영하고, JDBC 또는 ORM을 통해 요청에 따른 재료를 전송한다.

//Layered 아키텍처 관련 정리 글 첨부 예정

https://devhippo.tistory.com/99

 

DTO (Data Transfer Object)

DTODTO는 Controller - Service - Repository 계층 간 데이터를 전달하는 객체이다.(Entity에서 필요한 부분만 꺼내서 포장하는 부분이라고 생각할 수 있을 것 같다.)Entity를 직접 노출하지 않기 때문에 필드를

devhippo.tistory.com

 


📌Servlet이 잡무를 다 해주면 개발자는?


요리사(개발자)는 비즈니스 레이어 단계에서 요리를 한다.
Java를 연료로 불을 붙이고, 창고(DB)에서 가져온 재료들을 냄비(Framework)에 넣어
편리한 도구(ex, Spring Boot, Gradle 등)들로 조리한다.

🟩 Framework

소프트웨어 개발을 간편하게 만드는 개발 환경

// Framework 정리글 첨부 예정

🟩 Spring Boot, Gradle

// 관련 정리글 첨부 예정

 

📌조리가 끝나면

주문한 제품이 완성품이냐, 조리품이냐, 밀키트 혹은 비조리품이냐에 따라서
View의 템플릿 엔진이 동적으로 HTML을 생성한다.

SSR과 CSR은 데이터를 포장하는 방식이라고 볼 수 있다.
CSR은 고객에게 밀키트(HTML + JSON)를 전달하고, 고객이 직접(브라우저에서 JavaScript로) 조리(렌더링)한다.

완성된 제품이 Respond Message 함께 고객에게 전달되면, 다리는 사라지고 가게 영업(세션)은 종료된다. 

//SSR과 CSR 관련 정리글 첨부 예정

'Web' 카테고리의 다른 글

쿠키 Cookie와 세션 Session 그리고 토큰 Token  (1) 2025.04.10
DTO (Data Transfer Object)  (0) 2025.03.31
REST API와 RESTful API  (0) 2025.03.20
HTTP Message  (0) 2025.03.18
TCP와 UDP  (0) 2025.03.17