개발 PL 되기 #1. 코드만 알면 부족하다 — WEB/WAS/DB 서버 구성과 고가용성(HA) 이해하기
![]()
개발을 처음 시작했을 때는 서버라고 하면 하나의 컴퓨터에서 모든 것이 돌아가는 줄 알았습니다. 기능만 잘 구현하면 서비스도 자연스럽게 운영될 것이라 생각했죠.
하지만 프로젝트를 경험하고 PL(Project Leader) 업무를 준비하면서 생각이 달라졌습니다.
고객사는 “서버를 몇 대 구성해야 하나요?”, “장애가 발생하면 서비스는 어떻게 되나요?”, “공공기관이라 망 분리가 필요한데 가능한가요?”와 같은 질문을 합니다.
이 질문에 답하기 위해서는 단순히 코드를 작성하는 능력을 넘어 서비스 전체가 어떻게 구성되고 동작하는지 이해하고 있어야 합니다.
그래서 PL 교육을 시작하며 가장 먼저 정리한 내용이 바로 인프라 구성입니다.
서버 한 대로는 안 될까?
개인 프로젝트를 만들 때는 하나의 PC에서 WEB 서버, WAS, DB를 모두 실행해도 큰 문제가 없습니다.
하지만 수천 명의 사용자가 동시에 접속하는 서비스라면 이야기가 달라집니다.
예를 들어 LMS(학습관리시스템)를 생각해 보겠습니다.
학생들은 로그인하고, 강의를 시청하고, 시험을 보고, 과제를 제출합니다. 관리자는 강의를 등록하고 공지를 작성하며, 수많은 데이터가 동시에 저장됩니다.
이 모든 작업을 하나의 서버에서 처리한다면 CPU와 메모리에 부하가 집중되고, 서버 한 대만 장애가 나도 서비스 전체가 중단될 수 있습니다.
그래서 실제 운영 환경에서는 역할별로 서버를 분리하여 운영합니다.
WEB Server – 사용자가 가장 먼저 만나는 서버
사용자가 브라우저에서 사이트 주소를 입력하면 가장 먼저 접속하는 곳이 WEB Server입니다.
WEB Server의 가장 중요한 역할은 사용자의 요청을 받아 적절한 곳으로 전달하는 것입니다.
또한 HTML, CSS, JavaScript, 이미지처럼 자주 변경되지 않는 정적 리소스(Static Resource) 도 직접 제공합니다.
대표적으로 사용하는 프로그램은 nginx와 Apache입니다.
왜 굳이 WEB Server를 둘까요?
만약 이미지 하나 내려주는 작업까지 모두 WAS가 처리한다면 애플리케이션 서버의 자원을 불필요하게 사용하게 됩니다.
WEB Server가 정적 파일을 처리하면 WAS는 로그인, 결제, 학습 관리처럼 중요한 비즈니스 로직에만 집중할 수 있습니다.
즉,
- WEB Server는 요청을 받고
- 필요한 요청만 WAS로 전달하며
- 정적 리소스는 직접 처리하여 전체 성능을 높이는 역할을 합니다.
WAS Server – 서비스의 핵심 기능이 동작하는 곳
WEB Server가 입구라면 WAS(Web Application Server)는 서비스의 심장입니다.
사용자가 로그인 버튼을 눌렀다고 가정해 보겠습니다.
요청은 다음과 같은 순서로 처리됩니다.
- 사용자가 로그인 요청
- WEB Server가 요청 수신
- WEB Server가 WAS로 요청 전달
- WAS가 DB에서 회원 정보 조회
- 비밀번호 검증
- 로그인 세션 생성
- 결과를 사용자에게 반환
로그인뿐 아니라
- 수강 신청
- 진도 저장
- 시험 응시
- 게시판 작성
- 관리자 기능
모두 WAS에서 처리됩니다.
Spring Boot, Tomcat 등의 환경이 바로 이 영역에서 동작합니다.
결국 사용자가 사용하는 대부분의 기능은 WAS에서 구현된 비즈니스 로직이라고 볼 수 있습니다.
DB Server – 서비스의 모든 데이터를 보관하는 공간
WAS가 일을 처리한다면 DB(Database)는 데이터를 저장합니다.
예를 들어 LMS에서는 다음과 같은 정보들이 저장됩니다.
- 회원 정보
- 강의 정보
- 학습 진도
- 시험 결과
- 게시글
- 공지사항
WAS는 필요한 순간마다 SQL을 이용하여 DB와 통신합니다.
로그인을 하면 회원 정보를 조회하고,
진도를 저장하면 UPDATE를 수행하며,
새로운 게시글을 작성하면 INSERT를 수행합니다.
DB는 서비스의 가장 중요한 자산이기 때문에 성능뿐 아니라 백업, 복구, 이중화 전략까지 함께 고려해야 합니다.
Storage Server와 VOD Server는 왜 따로 둘까?
LMS에서는 일반 데이터 외에도 다양한 파일을 관리합니다.
예를 들어
- PDF 교재
- 과제 파일
- 이미지
- 첨부 문서
등은 Storage Server에 저장됩니다.
반면 동영상은 조금 다릅니다.
영상은 용량이 매우 크고 많은 사용자가 동시에 시청하기 때문에 별도의 VOD(Video On Demand) 서버에서 스트리밍하는 경우가 많습니다.
이렇게 역할을 분리하면 일반 서비스에 영향을 주지 않으면서 안정적으로 대용량 미디어를 제공할 수 있습니다.
서버를 여러 대 두는 이유 – 고가용성(HA)
운영 환경에서는 WEB Server와 WAS를 한 대만 운영하는 경우가 거의 없습니다.
왜냐하면 서버는 언제든 장애가 발생할 수 있기 때문입니다.

시스템의 안정성을 보장하는 고가용성(HA) 로드밸런싱 구조
예를 들어 WAS가 한 대뿐인데 장애가 발생한다면 로그인도, 강의도, 시험도 모두 평생 멈춰 버립니다.
그래서 실제 운영에서는 서버를 여러 대 구성하는 고가용성(High Availability, HA) 구조를 사용합니다.
대표적인 장비가 L4 Load Balancer입니다.
L4는 외부에서 들어오는 요청을 여러 서버에 분산합니다.
예를 들어
- WAS1
- WAS2
두 대가 운영 중이라면 요청을 적절히 나누어 전달합니다.
만약 WAS1이 장애가 발생하면 L4는 자동으로 WAS2에게만 요청을 전달합니다.
사용자는 거의 서비스 중단 없이 계속 이용할 수 있습니다.
이것이 HA 구성이 필요한 가장 큰 이유입니다.
WAS가 여러 대라면 세션은 어떻게 될까?
여기서 하나의 문제가 생깁니다.
사용자가 WAS1에서 로그인했는데 다음 요청이 WAS2로 전달된다면 어떻게 될까요?
WAS2는 로그인 정보를 가지고 있지 않기 때문에 사용자는 다시 로그인해야 하는 상황이 발생합니다.
이를 해결하기 위해 사용하는 것이 세션 클러스터링(Session Clustering) 입니다.
여러 WAS가 로그인 정보를 공유하도록 구성하여 어느 서버가 요청을 처리하더라도 동일한 로그인 상태를 유지할 수 있게 합니다.
로드밸런싱 환경에서는 거의 필수적으로 고려해야 하는 요소입니다.
CDN과 자체 VOD 서버
동영상 서비스를 제공할 때는 크게 두 가지 방식을 선택합니다.
첫 번째는 CDN(Content Delivery Network)을 사용하는 방법입니다.
CDN은 사용자와 가까운 지역의 서버에서 영상을 제공하기 때문에 속도가 빠르고 운영 부담이 적습니다.
반면 자체 VOD 서버를 구축하면 콘텐츠 보안이나 내부망 운영에는 유리하지만 서버 운영과 유지보수 부담이 커집니다.
어떤 방식이 더 좋다고 단정할 수는 없습니다.
서비스 규모, 예산, 보안 정책 등을 고려하여 선택하게 됩니다.
공공기관에서 자주 등장하는 ‘망 분리’
공공기관 프로젝트를 진행하다 보면 반드시 듣게 되는 용어가 있습니다.
바로 망 분리입니다.
외부 사용자가 접근하는 WEB Server는 DMZ 영역에 배치하고,
WAS와 DB 같은 핵심 서버는 내부망에 위치시켜 외부에서 직접 접근할 수 없도록 구성합니다.
PL은 기능만 확인하는 것이 아니라
- 파일은 어느 망에 저장되는지
- 외부에서 접근 가능한 서버는 어디인지
- 관리자 페이지는 어떻게 접근하는지
같은 부분까지 함께 이해해야 합니다.
이런 구조를 알아야 고객과도 같은 그림을 보며 이야기할 수 있습니다.
마무리
이번 내용을 공부하면서 가장 크게 느낀 점은 기능은 혼자 동작하지 않는다는 것이었습니다.
로그인 버튼 하나를 눌러도 WEB Server가 요청을 받고, WAS가 비즈니스 로직을 처리하며, DB가 데이터를 조회하고, 필요하면 Storage나 VOD 서버와도 통신합니다.
이러한 흐름을 이해하고 나니 장애가 발생했을 때도 어디부터 확인해야 하는지 조금씩 감이 생기기 시작했습니다.
PL은 코드를 가장 많이 작성하는 사람이 아니라, 서비스 전체를 이해하고 각 영역을 연결하는 사람이라고 생각합니다.
그래서 앞으로도 PL 교육에서 배우는 내용들을 하나씩 정리하며 기록해 보려고 합니다.
답글 남기기