728x90
반응형
개발 중 웹 서버와 WAS를 상당히 자주 들었는데 단순히 종류, 단순 기능만 알고 있었는데 개발자가 되려는 사람으로써 좀 더 자세히 알아야될 것 같아서 정리를 하고자 한다.
우선 웹은 무엇일까?
월드 와이드 웹 (World Wide Web):
- 웹은 월드 와이드 웹(WWW) 또는 간단히 "웹"이라고도 불립니다. 이는 인터넷에 연결된 문서와 리소스의 거대한 네트워크를 의미합니다.
- 웹은 1989년에 팀 버너스-리가 제안하고 개발한 개념으로, 초기에는 학술 정보를 공유하는 목적으로 시작되었지만, 현재는 전 세계적으로 사용되는 정보 및 서비스 제공 시스템이 되었습니다.
이러한 웹을 이루기 위해선 아래 요소가 필요하다.
웹 브라우저 (Web Browser)
웹 서버 (Web Server)
URL (Uniform Resource Locator)
HTTP/HTTPS (Hypertext Transfer Protocol)
HTML, CSS, JavaScript
웹 서버 (Web Server)
- 역할:
- 웹 서버는 정적인 콘텐츠(HTML, CSS, JavaScript, 이미지 등)를 클라이언트(주로 웹 브라우저)에게 제공하는 역할을 합니다.
- 주로 HTTP 요청을 처리하며, 클라이언트가 요청한 리소스를 반환하거나, 동적 콘텐츠가 필요할 경우 이를 처리할 수 있는 서버(WAS)로 요청을 전달합니다.
- 특징:
- 웹 서버는 빠르고 가벼운 구조를 가지고 있으며, 정적 파일 제공에 최적화되어 있습니다.
- 일반적으로 리버스 프록시로도 사용될 수 있으며, 여러 대의 WAS로 요청을 분배하는 로드 밸런서 역할을 하기도 합니다.
- 예시:
- Apache HTTP Server, Nginx, Microsoft IIS 등.
- 작동 방식:
- 클라이언트가 웹 서버에 HTTP 요청을 보내면, 웹 서버는 해당 요청에 맞는 정적 파일을 찾아 응답합니다.
- 만약 요청이 동적 콘텐츠에 관한 것이라면, 이를 WAS에 전달하여 결과를 받아 클라이언트에게 응답합니다.
하지만 웹 서버만 이용할 경우 이미 가지고 있는 정적인 자료만 볼 수 있다. 한마디로 우리가 로그인, 글쓰기, 글삭제 등 동적인 기능을 하지 못하고 이미 주어진 html 밖에 못본다는 점이다. 이러한 문제를 해결하고자 WAS가 나오게 된다.
WAS (Web Application Server)
- 역할:
- WAS는 동적인 콘텐츠(데이터베이스와 연동된 웹 페이지, 비즈니스 로직을 수행하는 애플리케이션 등)를 생성하고 제공하는 역할을 합니다.
- 웹 서버와 달리, WAS는 Java, PHP, Python, Ruby 등 다양한 프로그래밍 언어로 작성된 애플리케이션을 실행하여 요청을 처리합니다.
- 특징:
- WAS는 동적인 비즈니스 로직을 처리하고, 데이터베이스와의 연동, 트랜잭션 관리, 세션 관리, 보안 등 다양한 기능을 제공합니다.
- 종종 애플리케이션 서버라고도 불리며, 자바 서블릿, JSP, EJB 등 다양한 기술을 사용하여 애플리케이션을 실행합니다.
- 예시:
- Apache Tomcat, JBoss (WildFly), WebSphere, WebLogic 등.
웹 서버와 웹 컨테이너를 결합한 형태이고 데이터베이스와 연동하여 동적인 웹사이트를 제공할 수 있다.
근데 왜 웹서버와 WAS를 분리했을까?? 분리하면 생기는 이점은 다음과 같다.
1. 성능 및 효율성
- 정적 콘텐츠와 동적 콘텐츠의 분리:
- 웹 서버는 정적 콘텐츠(HTML 파일, 이미지, CSS, JavaScript 등)를 빠르고 효율적으로 처리하는 데 최적화되어 있습니다.
- 반면, WAS는 동적 콘텐츠(사용자의 요청에 따라 생성되는 페이지, 데이터베이스 조회 결과 등)를 처리하는 데 중점을 둡니다.
- 두 서버를 분리하면 웹 서버는 정적 콘텐츠만 처리하고, WAS는 동적 콘텐츠만 처리하게 되어 각각의 장점을 최대한 활용할 수 있습니다. 이로 인해 전체적인 성능이 향상됩니다.
- 로드 밸런싱:
- 웹 서버를 프론트엔드에 두고, 여러 대의 WAS로 요청을 분산시킬 수 있습니다. 이를 통해 트래픽이 많은 경우에도 웹 서버가 로드 밸런서를 통해 각 WAS에 균등하게 요청을 분배할 수 있습니다.
- 이렇게 하면 특정 WAS에 트래픽이 집중되지 않도록 하여 전체 시스템의 안정성과 성능을 높일 수 있습니다.
2. 확장성
- 수평적 확장:
- 웹 서버와 WAS를 분리하면, 두 컴포넌트를 독립적으로 확장할 수 있습니다. 예를 들어, 트래픽이 증가할 경우 웹 서버나 WAS 중 특정 부분만 추가로 확장하면 됩니다.
- 정적 콘텐츠 제공이 주로 필요하다면 웹 서버 인스턴스를 추가하고, 동적 콘텐츠 처리에 더 많은 자원이 필요하다면 WAS 인스턴스를 추가하는 방식으로 확장할 수 있습니다.
- 유연한 인프라 구성:
- 웹 서버와 WAS를 독립적으로 운영함으로써, 특정 웹 서버에서 여러 WAS를 연결하거나, 특정 WAS를 여러 웹 서버와 연결할 수 있습니다. 이로 인해 더욱 유연한 시스템 구성이 가능합니다.
3. 보안
- 네트워크 분리:
- 웹 서버와 WAS를 물리적 또는 네트워크적으로 분리하여, 보안을 강화할 수 있습니다. 예를 들어, 웹 서버는 외부 네트워크에 공개되지만, WAS는 내부 네트워크에서만 접근 가능하도록 설정할 수 있습니다.
- 이 경우, 웹 서버는 외부로부터의 직접적인 공격을 차단하는 방화벽 역할을 하며, WAS는 더 안전한 환경에서 동작하게 됩니다.
- 보안 설정 분리:
- 웹 서버와 WAS를 분리하면, 각 서버에 대한 보안 설정을 개별적으로 관리할 수 있습니다. 웹 서버는 주로 접근 제어, SSL/TLS 설정 등을 담당하고, WAS는 애플리케이션 계층에서의 인증, 권한 부여 등을 처리하게 됩니다.
4. 유지보수 및 관리 편의성
- 업데이트 및 재시작 관리:
- 웹 서버와 WAS를 분리하면, 각각을 독립적으로 업데이트하거나 재시작할 수 있습니다. 예를 들어, 웹 서버의 설정 변경 후 재시작이 필요할 때, WAS는 계속 동작할 수 있어 애플리케이션 가용성에 영향을 주지 않습니다.
- 이는 시스템의 가용성을 높이고, 유지보수 시에도 서비스를 중단 없이 제공할 수 있게 해줍니다.
- 로그 및 모니터링:
- 웹 서버와 WAS의 로그를 분리하여 관리하면, 트러블슈팅 시에 특정 문제의 원인을 쉽게 파악할 수 있습니다. 예를 들어, 정적 파일의 제공 문제는 웹 서버 로그에서 확인하고, 애플리케이션 오류는 WAS 로그에서 확인할 수 있습니다.
5. 전문화된 역할
- 웹 서버:
- 정적 콘텐츠 제공에 최적화되어 있고, 리버스 프록시 및 로드 밸런서 역할을 수행합니다.
- WAS:
- 비즈니스 로직 처리, 데이터베이스와의 연동, 트랜잭션 관리, 세션 관리 등을 담당합니다.
짧게 얘기하면 서버 부하 분산, 보안, 유지보수, 확장할때 용이하기에 분리를 해서 사용한다고 생각하면 편할 것 같다.
728x90
반응형
'CS' 카테고리의 다른 글
[CS] DB - 트랜잭션과 격리성 (0) | 2024.09.05 |
---|---|
[CS] 웹 페이지를 접속할 때 생기는 일 (1) | 2024.08.28 |
[CS] Redis 사용이유, 자료구조 살펴보기 (0) | 2024.08.24 |