1. 웹 애플리케이션, WAS, 서버의 기본 구조
웹 서비스는 클라이언트(사용자)의 요청을 받아 처리하고 응답을 보내는 과정으로 이루어집니다. 이 과정에는 주로 클라이언트, 웹 서버(Web Server), WAS(Web Application Server), **데이터베이스(Database)**라는 핵심 구성 요소들이 참여합니다.
1.1. 클라이언트 (Client)
- 역할: 사용자가 서비스를 이용하는 접점으로, 웹 브라우저, 모바일 앱 등이 해당됩니다. 사용자의 요청을 웹 서버나 WAS로 보냅니다.
1.2. 웹 서버 (Web Server)
- 역할:
- 정적 콘텐츠 제공: HTML, CSS, JavaScript, 이미지 파일 등 고정된(변하지 않는) 파일을 클라이언트에게 직접 전달합니다.
- 동적 요청 위임: 클라이언트의 요청 중 서버에서 처리해야 할 동적인 콘텐츠(예: 로그인, 데이터 조회/수정 등)는 WAS(Web Application Server)에 전달합니다.
- 로드 밸런싱: 여러 WAS에 요청을 효율적으로 분산하여 서버의 부하를 줄이고 안정성을 높이는 역할도 수행할 수 있습니다.
- 예시: Apache HTTP Server, Nginx 등
1.3. WAS (Web Application Server - 웹 애플리케이션 서버)
- 역할:
- 동적 콘텐츠 처리 및 비즈니스 로직 실행: 웹 애플리케이션의 핵심 로직을 수행합니다. 데이터베이스 연동, 복잡한 계산, 사용자 인증, 세션 관리 등 동적인 처리를 담당합니다.
- 웹 서버 기능 포함: WAS 자체적으로도 정적 콘텐츠를 제공하는 기능이 있지만, 대규모 서비스에서는 웹 서버와 WAS를 분리하여 효율성을 높입니다.
- 미들웨어: 클라이언트와 데이터베이스 사이에서 애플리케이션의 핵심 기능을 수행하는 중간 소프트웨어입니다.
- 예시: Apache Tomcat, JBoss(WildFly), WebLogic, WebSphere 등 (자바 기반 웹 애플리케이션에서는 '서블릿 컨테이너' 역할을 합니다.)
1.4. 데이터베이스 (Database)
- 역할: 웹 애플리케이션에서 필요한 데이터를 저장하고 관리합니다.
- 예시: MySQL, PostgreSQL, Oracle, MongoDB 등
일반적인 요청 처리 흐름:
- 클라이언트가 웹 서버로 요청을 보냅니다.
- 웹 서버는 요청이 정적 콘텐츠인지 동적 콘텐츠인지 판단합니다.
- 정적 콘텐츠인 경우 웹 서버가 직접 클라이언트에게 응답합니다.
- 동적 콘텐츠인 경우 요청을 WAS로 전달합니다.
- WAS는 비즈니스 로직을 수행하고, 필요에 따라 데이터베이스와 연동하여 데이터를 처리합니다.
- WAS는 처리 결과를 웹 서버로 다시 전달합니다.
- 웹 서버는 WAS로부터 받은 응답을 최종적으로 클라이언트에게 보냅니다.
2. Spring Boot 구조일 때의 차이점 (표로 설명)
전통적인 웹 애플리케이션 구조와 Spring Boot 기반 웹 애플리케이션 구조는 WAS의 존재 방식과 배포 방식에서 가장 큰 차이를 보입니다.
WAS 존재 방식 | 외부 WAS 필수: Apache Tomcat, Jetty, WebLogic 등 별도의 WAS를 서버에 설치하고, 그 안에 애플리케이션(.war 파일)을 배포해야 합니다. | 내장 WAS 포함: 애플리케이션 자체에 Tomcat, Jetty, Undertow 등의 WAS가 내장되어 있습니다. 별도의 외부 WAS 설치가 필요 없습니다. |
배포 단위 | .war (Web Application Archive) 파일 | .jar (Java Archive) 파일 (내장 WAS가 포함된 독립 실행 가능한 파일) |
실행 방식 | 외부 WAS 서버를 먼저 구동한 후, 그 안에 .war 파일을 올려야 애플리케이션이 실행됩니다. | java -jar your-application.jar 명령어로 바로 실행 가능합니다. 애플리케이션 자체가 서버 역할을 합니다. |
서버 설정 | WAS 서버 자체의 설정(포트, 컨텍스트 경로 등)을 수동으로 구성해야 하는 경우가 많습니다. | 대부분의 서버 관련 설정(내장 WAS 포트 등)이 Spring Boot의 자동 설정 기능으로 처리되어, 개발자의 수동 설정 부담이 적습니다. |
개발 생산성 | 설정 파일(XML 등)이 많아 초기 설정에 시간이 소요되고, 배포 과정이 다소 복잡할 수 있습니다. | 최소한의 설정으로 빠르게 개발을 시작할 수 있으며, 배포 과정이 매우 간소화되어 개발 생산성이 높습니다. |
마이크로서비스 적합성 | 각 서비스마다 WAS를 설치하고 관리해야 하므로, 마이크로서비스 아키텍처에 적용하기 다소 복잡할 수 있습니다. | 독립 실행 가능한 JAR 파일 형태로 각 서비스가 자체 WAS를 가지므로, 마이크로서비스 아키텍처 및 컨테이너(Docker) 환경에 매우 적합합니다. |
정적 콘텐츠 처리 | 일반적으로 웹 서버(Nginx, Apache)가 정적 콘텐츠를 처리하고, 동적 요청만 WAS로 전달합니다. | Spring Boot 애플리케이션이 직접 정적 콘텐츠도 제공할 수 있습니다. 하지만 대규모 정적 콘텐츠는 여전히 별도의 웹 서버나 CDN을 활용하는 것이 효율적입니다. |
결론적으로, Spring Boot는 내장 WAS를 통해 애플리케이션을 독립적인 실행 파일로 만들어, 개발과 배포 과정을 획기적으로 간소화하고 생산성을 높여줍니다. 이 점이 전통적인 웹 애플리케이션 구조와의 가장 큰 차이점입니다.
'프로그래밍 > JAVA' 카테고리의 다른 글
"어떤 언어를 배울까" 자바스크립트, 파이썬, 자바 3종 비교 (0) | 2024.05.29 |
---|---|
[JAVA] 스프링 부트 하루만에 배우기 (0) | 2024.04.05 |
[JAVA] 점프 투 스프링부트 - https://wikidocs.net/book/7601 (1) | 2024.04.04 |
Java Default Heap/Perm Size 알아내는 방법 (0) | 2020.12.11 |
자바 명명 규칙 - 클래스 / 메서드 / 변수 (0) | 2020.06.18 |