- 웹-서버 통신 기본 개념2025년 03월 19일
- chantleman
- 작성자
- 2025.03.19.:49
1️⃣ 웹 서비스의 기본 구조
🔹 Web Server (웹 서버)
- 클라이언트(브라우저)로부터 요청을 받아 정적인 콘텐츠(HTML, CSS, 이미지 등)를 제공
- 단순히 파일을 전송하는 역할을 수행
- 데이터를 직접 처리하지 않고, 클라이언트 요청을 WAS로 전달
🔹 WAS (Web Application Server)
- 사용자의 요청을 받아 동적인 콘텐츠(DB 조회, 로직 처리 등)를 제공
- 웹 서버가 요청을 전달하면, 실제 데이터 처리 및 응답을 담당
- 예를 들어, 사용자가 아이디/비밀번호를 입력하면 WAS가 DB에 조회 요청(SQL Query)을 보내고,
- 아이디가 존재하면 → 데이터 반환 (Found) → HTML에 데이터를 포함하여 클라이언트에 응답
- 아이디가 없으면 → "Not Found" 반환
📌 즉, 웹 서버는 데이터를 송수신하는 역할, WAS는 데이터를 처리하는 역할!
2️⃣ '상태' 개념의 등장과 데이터 저장
원래 웹은 클라이언트가 요청하면 서버가 응답하고 끝나는 방식이었지만,
양방향 상호작용 시스템이 적용되면서 '상태'라는 개념이 필요해졌당
상태 (state) → 전이 (Transition) → 기억 (Storage)
- '누가, 언제, 어디까지 상호작용했는지'를 저장해야함
이러한 상태를 저장하기 위해서는 두 가지 방식이 필요함
- 서버 측: 데이터베이스 (DB)에 저장
- 클라이언트 측: 쿠키, 로컬 스토리지 활용
📌 왜 DB와 쿠키가 필요할까?
HTTP는 Stateless 프로토콜이기 때문에 요청과 응답 간의 연관성이 없음
즉, 서버가 이전 요청을 기억하지 못하기 때문에 사용자의 정보를 저장하기 위한 장치(DB, 쿠키)가 필요해진 것!
3️⃣ 백엔드와 프론트엔드 완전 분리
과거에는 서버가 HTML 문서를 만들어서 클라이언트에서 전달했는데
점점 다양한 기기가 등장하면서 그것을 다시 서버에서 처리하는 과정들이 생겨버렸다
🔹 해결책: 서버는 "순수 데이터"만 보내자!
- 서버에서 HTML을 만들어 보내는 대신, 순수 데이터만 보내고 클라이언트가 화면을 구성하도록 변경
- 데이터를 표현하는 대표적인 방식: XML, JSON
- 클라이언트에서 데이터를 처리하는 대표적인 기술: React, Vue.js 등 JS 프레임워크
📌 즉, 서버는 데이터를 제공하고, 프론트엔드는 UI를 담당하는 구조로 변화!
4️⃣ RESTful API란?
✅ RESTful API의 핵심 개념
- 클라이언트가 서버에 요청을 보내면, 서버는 데이터를 읽거나(READ), 쓰는(WRITE) 작업을 수행해야 함
- 이러한 작업을 I/O Request라고 하며, 여기서 CRUD(Create, Read, Update, Delete) 개념이 나옴
📌 즉, RESTful API는 요청을 함수(API)로 만들어 URL을 통해 데이터를 주고받는 방식!
✅ RESTful API 서버 동작 원리
- 클라이언트가 URL을 통해 요청을 보냄
- 서버의 Controller(제어 체계)가 요청을 받아 처리
- 해당 요청이 어떤 데이터(Model)를 가져와야 하는지 판단
- 서버가 데이터를 반환하면, 클라이언트에서 데이터를 받아 화면에 표시
5️⃣ 성능 문제 분석 & 장애 대응
📌 어디서 속도가 느려질까?
- 인터넷이 느려지면? 👉 웹 서버(Web Server)의 문제
- 처리가 느려지면? 👉 WAS(Web Application Server)의 문제
- DB 응답이 느리면? 👉 전체 서비스가 느려짐 (DB 성능이 최종 속도를 결정)
📌 결론: 장애 대응이 중요! (특히 백엔드라면)
- 응답 속도(Response Time)를 모니터링
- 서버 부하, 네트워크 상태, DB 성능 등 어디에서 병목이 발생하는지 분석해야함
- 시스템 성능을 최적화하려면 실시간 모니터링과 로그 분석이 필수!
6️⃣ 컴퓨터의 구조와 JVM
컴퓨터를 보면 아래와 같이 크게 3가지 계층으로 나눌 수 있당
[ 사용자 영역 ] ├── User (JVM) ---------------------------- [ 시스템 영역 ] ├── Kernel (OS) ---------------------------- [ 하드웨어 영역 ] ├── CPU + RAM + SSD ...
🔹 JVM (Java Virtual Machine)이란?
컴퓨터는 원래 CPU가 이해할 수 있는 기계어(Assembly)로 명령을 실행하지만,
자바는 "기계어" 대신 "Java Byte Code"를 실행하는데, 이를 담당하는 것이 JVM📌 즉, .class 파일이 생성되면 JVM에서 실행할 수밖에 없는 Java Byte Code로 변환됨!
🔹 JSP, PHP, ASP는 어떻게 실행될까?
- JSP, PHP, ASP 같은 서버 사이드 언어는 바로 실행되지 않음
- Servlet으로 변환되어 실행되며, 이를 효율적으로 관리하는 것이 "Framework" (예: Spring Framework).
🔹 Spring과 Container 개념
- Spring Container는 객체를 생성하고 소멸시키는 역할을 함
- 개발자가 직접 객체를 생성하지 않고, @Annotation을 사용하면 Spring이 자동으로 관리
📌 즉, 개발자는 객체 생성과 소멸을 신경 쓰지 않아도 되고, Spring이 알아서 해줌!
이 모든 것을 체크해주는 것이 APM
✅ APM이란?
APM은 애플리케이션의 성능을 실시간으로 모니터링하는 도구로
특히 DB 응답시간 체크, JVM 상태 모니터링 등의 역할을 수행한당📌 운영 중 문제가 발생하면 APM을 통해 원인을 찾을 수 있음!
✅ 대표적인 APM 툴
- 제니퍼 (Jennifer)
- 스카우터 (Scouter)
👉 운영팀(DevOps, SRE)에서 APM을 지속적으로 모니터링하며 장애를 대응함!
7️⃣ 웹 보안 (HTTPS & 방어 체계)
웹 서비스는 보안이 필수 !
HTTPS(보안 프로토콜)에는 3단계 방어 체계가 존재한다🔹 웹 보안 3단계 방어 체계
- IPS (Intrusion Prevention System, 침입 방지 시스템) → 1차 방어
- 외부 공격을 차단하는 역할
- SSL (Secure Sockets Layer) → 데이터 암호화
- 클라이언트와 서버 간 데이터가 암호화되어 전송됨
- WAF (Web Application Firewall) → 웹 애플리케이션 방화벽
- 웹 서버와 WAS를 보호하는 보안 시스템
📌 즉, IPS는 공격을 막고, SSL은 데이터를 보호하며, WAF는 웹 애플리케이션을 보호!
🔹 DMZ (Demilitarized Zone, 비무장 지대)
- 외부에서 접근할 수 있는 서버를 보호하기 위해 특정 네트워크 구역을 설정함
- 웹 서버는 DMZ에 위치하고, 내부 DB 서버는 보호망 안쪽에 배치됨
📌 이러한 보안 체계를 갖춰야 ISMS-P(정보보호 관리체계) 인증을 받을 수 있음!
8️⃣운영체제와 멀티태스킹
운영체제(OS)는 컴퓨터의 여러 프로세스를 동시에 실행하는 역할을 함
특히, 멀티태스킹 환경에서는 운영체제가 프로세스를 제어하는 것이 가장 중요🔹 멀티태스킹 & 동기화
- 여러 개의 프로세스가 동시에 실행되면 동기화 문제가 발생할 수 있음
- 운영체제가 이를 해결해야 함 (예: Mutex, Semaphore 사용)
📌 즉, OS가 프로세스를 관리하며, 충돌이 발생하지 않도록 동기화하는 것이 핵심!
🔹 Native Code란?
- 특정 CPU와 OS 환경에서만 실행되는 코드 (예: C, C++)
- CPU와 OS에 의존적이기 때문에, 이식성이 낮음
📌 반면, Java는 JVM 위에서 동작하기 때문에 운영체제에 종속되지 않음!
🔹 가상 메모리 (Virtual Memory)
- RAM과 SSD(디스크)를 묶어서 가상 메모리 형태로 관리
- OS는 가상 메모리를 통해 메모리 부족 문제를 해결
📌 즉, OS가 물리 메모리(RAM) + 저장 장치(SSD)를 가상 메모리로 관리하여 효율적으로 메모리를 사용!
9️⃣비동기(Asynchronous)와 동기(Synchronous)
✅ 비동기 (Asynchronous)
- 작업을 OS에게 맡기고, 프로세스는 다음 작업을 수행
- 예: 세탁소에 옷을 맡기고 다른 일을 하는 것과 동일
📌 즉, 입출력(I/O) 작업을 요청한 후, 결과가 나올 때까지 기다리지 않고 다른 작업을 수행함!
✅ 동기 (Synchronous)
- 입출력(I/O)이 완료될 때까지 기다리는 방식
- 예: 세탁기가 다 돌아갈 때까지 기다리는 것과 동일
📌 즉, 동기는 결과를 기다리는 방식, 비동기는 기다리지 않고 바로 다음 작업을 수행하는 방식!
✅ 비동기 vs 멀티스레드
- 비동기: I/O 작업을 OS가 처리하도록 요청하고, 프로세스는 다른 작업을 수행
- 멀티스레드: 하나의 프로세스에서 여러 개의 작업(스레드)을 동시에 실행
📌 즉, 비동기와 멀티스레드는 개념적으로 다름!
- 비동기는 I/O 작업과 관련된 개념
- 멀티스레드는 CPU 작업을 여러 개의 스레드로 나누어 실행하는 개념
✅ 브라우저에 URL을 입력하면 일어나는 일
1. DNS를 통한 IP 주소 변환
브라우저에서 https://www.naver.com 같은 URL을 입력하면, 먼저 해당 도메인의 IP 주소를 찾아야 한당
- hosts 파일 확인: PC의 hosts 파일에서 해당 도메인의 IP 정보가 있는지 확인
- DNS 캐시 조회: 운영체제(OS) 또는 브라우저에 저장된 DNS 캐시에서 IP 조회
- DNS 서버 쿼리: 캐시에 정보가 없다면, 설정된 DNS 서버에 요청하여 해당 도메인의 IP 주소 조회
- IP 주소를 받으면, 해당 정보를 DNS 캐시에 저장하여 이후에는 DNS 질의없이 바로 접근 가능
📌 DNS 서버는 로컬 PC의 네트워크 설정(TCP/IP 설정)에 따라 달라질 수 있음
2. 클라이언트와 서버 간 연결
DNS 서버에서 naver.com의 IP 주소를 획득한 후, 클라이언트(브라우저)는 해당 IP 주소로 TCP 연결을 수행합니다.
- TCP 3-way Handshake: 클라이언트와 서버가 연결 설정.
- SYN → SYN-ACK → ACK 과정을 거쳐 연결
- TLS 핸드셰이크(HTTPS의 경우): 보안 연결(SSL/TLS)을 설정하여 데이터를 암호화
- HTTP 요청 전송: 클라이언트는 root direcotry로 GET / 요청을 보내 웹 페이지 데이터를 요청
3. 서버의 응답과 웹 페이지 로딩
서버는 요청을 처리한 후, 브라우저가 화면에 표시할 수 있는 데이터를 응답합니다.
- HTTP 응답 수신: 서버가 HTML, CSS, JavaScript 등의 웹 리소스 반환
- 렌더링 엔진 동작: 브라우저는 HTML을 분석하고 CSS와 JavaScript를 적용하여 화면 구성
- 추가 리소스 요청: 페이지에 포함된 이미지, 동영상, 폰트 등의 추가 리소스 다운로드
4. 웹 리소스 캐싱
브라우저는 성능 향상을 위해 웹 리소스를 캐시에 저장하여 불필요한 다운로드를 줄임
- 디스크 캐시: 자주 사용하는 리소스를 저장하여 빠르게 로드
- 메모리 캐시: 현재 페이지에서 사용 중인 리소스를 임시 저장하여 속도 향상
👉 캐싱 덕분에 같은 웹사이트에 재접속할 때 더 빠르게 로드된당 !!
728x90다음글이전글이전 글이 없습니다.댓글