Server-Client 구조란 데이터를 저장하고 관리하는 서버 부분과 해당 서버에 접속하여 데이터를 열람하는 클라이언트 부분으로 구성된 네트워크 구조이다.
3 Tier 구조란 웹에서 프레젠테이션(UI), 비즈니스 로직, 데이터 계층을 역할 별로 체계적으로 분리한 아키텍처이다.
Main Frame: Host-Terminal (1960~1970)
Server-Client: PC-Server (1980~1990)
Web: (1990~2000)
RIA/Cloud: (2000~)
| 구분 | Main Frame | Client/Server 모델 | Web | RIA / Cloud |
|---|---|---|---|---|
| Client Side 기능/자원 | Thin | Fat (강력한 UI 기능) | Thin | Fat |
| Client | Dummy Terminal | 설치 필요한 전용 Client Application | 각종 브라우저 | 각종 브라우저 / App |
| Server Side 기능/자원 | Fat (중앙집중) | Thin (Client Application에 기능 분산) | Fat (중앙집중) | 병행 Thin (Client에 기능분산) Fat (자원/infra 확장) |
| Server | Main Frame (HOST) | Application Server Middleware (2, 3 tier) | Web Server Web Application Server | Web Server Web Application Server |
| 네트워크 방식 | 통합 / 시리얼 케이블 | LAN / WAN / VPN | LAN / WAN | LAN / WAN |
| 통신 프로토콜 | TN3270(IBM) SNA / PPP(모뎀) | TCP/IP (TCP / UDP) | HTTP / HTTPS / SOAP | HTTP / HTTPS / SOAP |
| State | Stateful | Stateful/Stateless (필요에 따라 개발 가능) | Stateless | Stateful |
| 주 개발언어 | COBOL 외 PL/I 혹은 FORTRAN / BASIC | 4세대 언어 (Power Builder, Visual Basic, Delphi 등) 때때로 VC++ | HTML / javascript, CGI, JSP / JAVA, ASP / VB / C#, PYTHON | XHTML, HTML5, javascript, ajax, JSP / JAVA, ASP, .NET, C#, PYTHON |
| 단점 | - 열악한 UI - 확장성 및 개발 유연성 부족 - 벤더 제품에 국한된 시스템 - 고비용 서버 | - 클라이언트 배포/관리 어려움 - 사용자 간편 UI 구축 제한 - 구조를 라이어드로 유연하게 하려면 설계 이론적 | - C/S 모델에 비해 약한 UI - 매 화면(page) Refresh - 보안 문제 - 서버 고부하 - 정적인 디자인 이미지 | - 아직 표준화 진행 중 - 복잡한 서버 사이드 로직 - 클라이언트 기능 미흡 - 대용량 데이터 한계 |
| 서버 종류 | 주요 기능 및 역할 |
|---|---|
| 웹 서버 | HTML, CSS, JS 등 웹 콘텐츠를 클라이언트(브라우저)에 전달 예: Apache, Nginx |
| 애플리케이션 서버 | 동적 웹 페이지 생성 및 비즈니스 로직 실행 예: Tomcat, WebLogic |
| 데이터베이스 서버 | 데이터 저장, 검색, 수정 등 데이터베이스 서비스 제공 예: MySQL, PostgreSQL |
| 파일 서버 | 파일 저장 및 공유 기능 제공 예: Samba, NFS |
| 메일 서버 | 이메일 송수신, 저장, 전송 관리 예: Postfix, Exchange |
| 프록시 서버 | 클라이언트와 외부 서버 사이에서 요청 중계, 캐싱, 보안 필터링 예:Squid |
| DNS 서버 | 도메인 이름을 IP 주소로 변환 예: BIND |
| FTP 서버 | 파일 전송 프로토콜을 이용한 파일 업로드, 다운로드 지원 예: vsftpd |
| 클라우드 서버 | 온디멘드 기반 컴퓨팅 자원 제공, 유연한확장 가능 예: AWS EC2, Azure VM |
사용자가 웹 브라우저를 특정 URL로 접근했을 때 아래의 순서대로 Web 서버가 동작한다.
<script src="">, <img>, <link> 등 외부 리소스가 있으면 병렬로 추가 요청Web(http)는 기본적으로 Stateless 상태로 동작한다.
다만 인증과 같은 상태 유지를 위해 Stateful처럼 동작해야 한다. Stateful로 동작하기 위해선 Session이나 JWT와 같은 토큰을 활용하여 Stateful 상태를 유지한다.
| 항목 | 저장 위치 | 서버 상태 유지 여부 | Stateful? |
|---|---|---|---|
| 쿠키 (Cookie) | 클라이언트 (브라우저) | ✅ 일부 (세션 ID 저장 시) | 🔶 조건부로 stateful |
| 세션 (Session) | 서버 | ✅ 서버가 상태를 유지 | ✅ Stateful |
| 로컬스토리지 | 클라이언트 (브라우저) | ❌ 서버는 모름 | ❌ Stateless |
웹 서버는 HTML, CSS, JS, 이미지 같은 정적 리소스를 클라이언트에게 제공하는 서버로, HTTP/HTTPS 프로토콜을 통해 요청과 응답 방식으로 동작하며, Apache, NGINX, IIS 등이 대표적으로 사용된다.
정적 서버는 일반적으로 WAS보다 성능이 좋고 정적 리소스 공유에 최적화 되어있다.
| 웹 서버 | 개발사 / 배포 | 특징 | 장점 | 단점 | 활용 사례 |
|---|---|---|---|---|---|
| Apache HTTP Server | Apache | 모듈형 아키텍처, 멀티 프로세스 기반 | 오픈소스, 다양한 모듈 지원, 광범위한 사용 | 고부하 환경에서 성능 저하 가능 | 전통적 웹사이트, 중소형 서비스 |
| NGINX | F5 / NGINX Inc. | 이벤트 기반 아키텍처, 비동기 처리, 리버스 프록시·로드밸런싱 지원 | 고성능, 낮은 리소스 사용량, 확장성 우수 | 동적 처리에 한계 | 대규모 정적 사이트, CDN, 프록시 서버 |
| Windows IIS | Microsoft | Windows 전용, GUI 관리, .NET과 밀접 통합 | 보안성 높음, MS 제품과 호환성 우수 | Windows 의존성, 라이선스 비용 | Windows 기반 인트라넷·포털 |
WAS는 동적 웹 애플리케이션을 실행하고 비즈니스 로직을 처리하는 서버로, 웹 서버와 데이터베이스 사이에서 동작하며 사용자 요청에 따라 동적으로 콘텐츠를 생성한다.
대표적으로 Tomcat, JBoss, WebLogic, JEUS 등이 사용된다.
동적 서버는 성능이 저하되므로 가능하면 정적 자원은 정적 서버로 구성하는 것이 좋다.
| WAS | 개발사 / 배포 | 특징 | 장점 | 단점 | 활용 사례 |
|---|---|---|---|---|---|
| Apache Tomcat | Apache Software Foundation | Servlet/JSP 컨테이너, 경량 WAS | 오픈소스, 가볍고 빠름, 커뮤니티 활발 | EJB 등 고급 JEE 스펙 미지원 | Spring·JSP 기반 웹 애플리케이션 |
| JBoss EAP (WildFly) | Red Hat | 완전한 Java EE 스펙 지원, 모듈형 아키텍처 | 엔터프라이즈 지원, Red Hat 기술 연계 | 설정 복잡, 상대적 무거움 | 대규모 엔터프라이즈 Java 시스템 |
| WebSphere | IBM | JEE 풀스택 지원, 다양한 IBM 솔루션 통합 | 대기업용 엔터프라이즈 환경 최적화 | 높은 라이선스 비용, 무거움 | 금융, 제조, 공공기관 |
| JEUS | TmaxSoft | 국내 개발, Java EE 기반, 클라우드 지원 | 국산 기술, 공공기관 최적화, 빠른 기술지원 | 해외 커뮤니티 부족 | 공공기관·국내 대기업 시스템 |
Web Server
WAS
Nginx + Tomcat 이중화를 통해 정적 서버와 WAS를 조합하여 구성할 수 있다.
Nginx는 클라이언트 요청을 받아 정적 콘텐츠를 빠르게 제공하고 동적 처리가 필요한 요청은 Tomcat으로 전달해 효율적으로 분담한다.
Tomcat은 전달받은 요청을 처리하며 비즈니스 로직 실행과 데이터베이스 연동을 담당한다.
이 조합은 성능과 확장성을 높이고 정적, 동적 콘텐츠를 효과적으로 분리해 관리할 수 있게 한다.
IPv4 주소
주요 특징
요청 라인(Reuqest Line)
요청 헤더(Reuqest Header)
요청 본체(Request Body)
상태 라인(Status Line)
응답 헤더(Response Header)
응답 본체
| 구분 | URI (Uniform Resource Identifier) | URL (Uniform Resource Locator) |
|---|---|---|
| 목적 | 리소스의 식별자 | 리소스의 위치 표시 |
| 포함 관계 | URL의 상위 개념 | URI ⊃ URL |
| 예시 | mailto:hello@example.com | https://www.example.com/index.html |
| 정의 | 리소스를 유일하게 식별할 수 있으면 URI | 위치를 명시(접속 가능)하면 URL |
한 줄 요약:
URI는 "리소스를 식별"하는 모든 식별자,
그중 URL은 "접속 가능한 주소"를 의미한다.
[scheme] : [//authority] [path] [?query] [#fragment]
| 구성 요소 | 의미 | 예시 |
|---|---|---|
scheme | 사용 프로토콜 | http, https, ftp, mailto, file |
authority | 도메인 + 포트 + 인증정보 | www.example.com:8080 또는 user:pass@host |
path | 자원 경로 (폴더/파일) | /index.html, /api/user/123 |
query | 추가 파라미터 | ?search=cat&sort=desc |
fragment | 문서 내 위치 참조 | #section2, #top |
https://user:pass@example.com:8080/path/to/resource?search=cat&sort=desc#section2
| 요소 | 값 |
|---|---|
| scheme | https |
| authority | user:pass@example.com:8080 |
| path | /path/to/resource |
| query | search=cat&sort=desc |
| fragment | section2 |
사람에게 익숙한 도메인 이름(www.example.com)을
컴퓨터가 이해할 수 있는 IP 주소(93.184.216.34(로 바꿔주는 시스템
www.example.com 입력/etc/hosts, C:\Windows\System32\drivers\etc\hosts캐시에 없다면 → 브라우저는 DNS 재귀 리졸버(Recursive Resolver)에게 질의
.com, .net, .kr 등 TLD 서버의 위치 알려줌.com을 관리하는 TLD 서버 응답".com 등 상위 도메인을 담당example.com의 권한 있는 DNS 서버 주소(NS 레코드) 반환example.com을 담당하는 네임서버 응답"example.com 소유자가 운영하는 네임서버93.184.216.34 응답93.184.216.34면,https://93.184.216.34로 실제 접속Root (.)
├── TLD (.com, .net, .kr, ...)
│ └── 도메인 권한 서버 (example.com)
│ └── 하위 도메인 (www.example.com)