웹서비스 이해와 설계
웹서비스의 개념, 구성 요소, 통신 방식, 웹서버와 WAS 차이, HTTP/HTTPS 프로토콜, API와 REST 설계까지 폭넓게 정리한 글입니다.
웹서비스 이해와 설계
1. 웹서비스란?
- 인터넷을 통해 데이터를 주고받는 서비스
- 웹 브라우저, 모바일 앱 등 다양한 클라이언트가 접근
- HTTP, HTTPS 프로토콜 기반
네거시 시스템(Legacy System): 이전 세대의 기술이나 설계로 만들어졌고, 현재 환경이나 요구사항에 잘 맞지 않는 시스템을 말합니다.
2. 웹서비스의 기본 구조
클라이언트 (Client)
- 사용자 요청 전송
- 예: 웹 브라우저, 모바일 앱
서버 (Server)
- 요청 처리 및 응답 반환
- 예: 웹 애플리케이션 서버, 데이터베이스 서버
네트워크
- 클라이언트와 서버 간 연결
- 인터넷, LAN 등
게이트웨이(MCI): 외부와 내부 네트워크를 연결해주는 역할을 합니다.
3. 요청과 응답 (Request & Response)
Request
- 클라이언트 → 서버
- 메서드: GET, POST, PUT, DELETE 등
Response
- 서버 → 클라이언트
- 상태 코드: 200(성공), 404(없음), 500(서버 오류) 등
4. 웹서비스의 구성 요소
웹 서버
- 정적 컨텐츠 제공 (HTML, CSS, 이미지)
애플리케이션 서버(WAS)
- 동적 컨텐츠 처리 (비즈니스 로직)
데이터베이스(DB)
- 사용자 정보, 게시물 등 데이터 저장
API
- 시스템 간 데이터 통신을 위한 인터페이스
설계 흐름
- 클라이언트(웹브라우저) → 웹서버(Apache, Nginx) → 애플리케이션 서버(WAS) → DB
- 사용자 정보 전송 시 HTTP 헤더와 바디를 통해 전송
- WAS는 DB와 연동해 비즈니스 로직 처리
- Tomcat(무료 WAS) → 여러 인스턴스 + 로드밸런싱
- 웹서버는 DMZ 구간에 배치
5. 클라이언트-서버 모델
- 클라이언트: 요청 전송
- 서버: 요청 처리 및 응답 전송
- Stateless(무상태): 요청 간 상태 유지하지 않음
메모
- 클라이언트와 서버의 역할이 명확
- 복잡한 서비스는 P2P나 메시징큐 방식도 사용
6. 웹서비스 통신 방식
동기 통신
- 요청 후 응답을 기다림
- 예: 대부분의 웹 요청
비동기 통신
- 응답을 기다리지 않고 다른 작업 가능
- 예: AJAX, fetch API
웹서버란?
- 정의: HTTP 요청을 처리해 정적 콘텐츠(HTML, CSS, 이미지)를 전달하는 서버
- 역할: 정적 파일 제공, 요청 라우팅
- 예시: Apache, Nginx
WAS(Web Application Server)란?
- 정의: 동적 콘텐츠를 생성하고 제공
- 역할: 비즈니스 로직 처리, DB 연동
- 예시: Tomcat(Java), JBoss, WebLogic
웹서버 vs WAS 비교
구분 | 웹서버 | WAS |
---|---|---|
주 역할 | 정적 콘텐츠 제공 | 동적 콘텐츠 처리 |
예시 | Nginx, Apache | Tomcat, JBoss |
처리 범위 | HTTP 요청 응답 | 로직 처리 + DB 연결 |
속도 | 빠름 | 상대적으로 느림 |
왜 분리할까?
- 역할 분리로 성능, 보안 향상
- 웹서버가 정적 파일을 빠르게 처리 → WAS 부하 감소
- 로드밸런싱 구성 시 유연성 확보
동작 흐름 예시
사용자 요청 → 웹서버
정적 파일이면 웹서버 응답
동적 요청이면 WAS로 전달
WAS가 DB와 통신 후 결과 생성
결과를 웹서버 → 클라이언트로 전달
구성 예시
1
2
3
4
5
6
7
[Client]
│
[웹서버(Nginx)]
│
[WAS(Tomcat)]
│
[DB Server]
요약
- 웹서버: 정적 리소스 처리
- WAS: 비즈니스 로직과 DB 연동 처리
- 역할 분리로 효율성과 확장성 향상
HTTP vs HTTPS
HTTP
- 포트 80
- 평문 전송 → 보안 취약
- 메서드: GET, POST, PUT, DELETE, PATCH
HTTPS
- 포트 443
- SSL/TLS 암호화 → 데이터 기밀성, 무결성, 인증 제공
항목 | HTTP | HTTPS |
---|---|---|
보안 | 없음 | 암호화 제공 |
속도 | 빠름 | 암호화 오버헤드 있음 |
용도 | 공개 페이지 | 로그인, 결제 등 민감정보 |
HTTP 메시지 구조
1
2
3
4
<시작 라인>
<헤더>
<빈 줄>
<바디>
시작 라인
- 요청:
GET /index.html HTTP/1.1
- 응답:
HTTP/1.1 200 OK
헤더
- 메타데이터 정보 전달
- 예: Content-Type, Content-Length, Cookie
바디
- 실제 데이터 전달 (HTML, JSON, 이미지 등)
예시 요청 메시지
1
2
3
4
5
6
7
8
POST /api/data HTTP/1.1
Host: example.com
Content-Type: application/json
{
"name": "John",
"age": 30
}
예시 응답 메시지
1
2
3
4
5
6
7
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "success",
"message": "OK"
}
API란?
- Application Programming Interface
- 시스템 간 데이터와 기능을 주고받는 통신 창구
RESTful API 특징
- HTTP 기반 설계 원칙
- URL로 리소스 식별
- 무상태성
예시
/users/1
→ GET: 사용자 정보 조회/products
→ POST: 상품 생성
REST API 설계 예시 (도서 관리)
메서드 | URL | 설명 |
---|---|---|
GET | /books | 도서 목록 조회 |
GET | /books/{id} | 특정 도서 조회 |
POST | /books | 새 도서 등록 |
PUT | /books/{id} | 도서 정보 수정 |
DELETE | /books/{id} | 도서 삭제 |
요약
- 웹서비스 = 클라이언트-서버 모델 기반
- 웹서버/WAS 역할 분리로 효율성 향상
- HTTP/HTTPS → 통신의 뼈대
- API/REST → 서비스 간 통합 핵심 인터페이스
This post is licensed under CC BY 4.0 by the author.