개발지식 먹는 하마 님의 블로그
웹 서비스 구조 및 흐름을 비유와 함께 이해하기 본문
웹 서비스의 전체적인 구조와 관계, 흐름, 각 요소의 역할을 좀 더 쉽게 이해하고 떠올릴 수 있도록
특정 상황에 비유해 정리하였다.
일부 내용은 간략화를 위해 생략되었고 별도의 글에 자세히 정리하였다.
⚙️ Web Service
웹을 통해 클라이언트와 서버가 HTTP 기반으로 데이터를 주고받으며 동작하는 서비스
웹 서비스 구조는 우리가 일상 생활에서 흔히 볼 수 있는 가게 운영 시스템과 굉장히 유사하다.
다만, 일하는 직원이 전자기기 또는 어떤 개념으로 대체될 뿐이다.
📌클라이언트 - 서버 간 통신
프로토콜에 따라 클라이언트와 서버를 연결하고 데이터를 전송한다.
서로 다른 공간에 있는 고객과 가게는 인터넷으로 연결 되어있다.
IP는 데이터 패킷을 목적지까지 전달하는 배달기사다.
IP 주소와 Port 번호(동호수 같은 역할)로 데이터 패킷을 전송한다.
이 때, 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 |