백엔드 기획을 위해 알아야 할 백엔드 구성의 3요소
(maily.so)백엔드 환경의 핵심은 사용자에게 데이터를 안정적으로 전달하는데 있습니다. 이를 위해 웹서버, WAS, 데이터베이스 3가지 핵심 요소가 반드시 필요합니다. 이 세가지는 웹의 발전 과정에서 나타난 문제점들을 해결하기 위해 진화해 오고 있습니다. 모니터링, 로드밸런싱, 캐싱, CI/CD 파이프라인, 쿠버네티스와 같은 고급 기술들은 이 3가지 요소에 대한 이해가 선행되지 않는다면 언제 무너져도 이상하지 않은 집을 지은 것과 마찬가지 입니다.
첫번째, 웹서버의 역할
웹서버의 주요 역할은 파일을 전달하는 파일 서버였으며, 대표적인 웹서버로는 Nginx, Apache, IIS, Caddy 등이 있습니다. 이런 웹서버들은 정적 파일을 제공하는 기본 기능에 충실하며 고도로 최적화되어 있습니다.
두번째, WAS(Web Application Server)의 등장과 역할
WAS는 특정 요청을 받으면 미리 약속된 프로그램을 실행시키고 그 프로그램이 만들어낸 결과물을 사용자에게 출력하는 방식으로 동작합니다. 이러한 방식이 진정한 백엔드의 탄생이라 말할 수 있으며, 서버가 단순히 파일을 출력하는 것을 넘어 생각하고 연산하고 로직을 처리하기 시작한 순간입니다. 웹서버는 항상 동일한 정적인 페이지를 반환하지만, WAS는 동적인 페이지를 반환합니다.
세번째, 데이터베이스의 필요성과 역할
데이터베이스는 데이터를 영구적으로 저장하고 안전하게 관리하며 동시 접근을 제어하는 역할을 수행합니다.
이 외에도 백엔드 기획을 위해 알아두면 매우 유용한 것들은 RESTful API 설계(자원 중심의 URL 설계, HTTP(GET, POST, PUT, DELETE 등) 의미, 상태 코드 사용 등 REST 아키텍트 스타일에 기반한 API 설계 원칙) 와 인증(세션 기반 인증 등 사용자 인증과 권한 부여 방식에 대한 기본적인 이해와 사용자 관리 정책 수립), 에러 처리(시스템 안정성을 확보하기 위한 필수적인 예외 케이스 처리에 대한 개념) 에 대한 이해 등 을 꼽을 수 있습니다.
웹서버 / WAS 의 개념을 아는것이 여전히 유의미 할까요?
Java EE, php, CGI 가 유행이던 시절에는 적절한 구분이긴 했었지만, 요즘은 어지간한 언어는 자체 http server 를 내장하고 있고 ALB, API Gateway, CDN, Object Storage 같은 개념들이 등장하고 일상화 되면서 시대가 바뀌었습니다.
오히려 역사적인 맥락 없이 지금과는 크게 다른 Web Server 와 WAS 에 대한 개념은 더이상 적절한 개념도 아니고 입문자로 하여금 더 큰 혼란만 가져올꺼 같다는 생각이 드네요.
클라우드 환경인 지금도 대용량 처리를 위해
하나의 인스턴스 안에서 다중에 WAS를 효율적으로 밸런싱 하기 위해 사용합니다
네트워크 요청이 적다면 필요없겠지만
보안적인 측면을 고려할때 여전히 Web Server / WAS 서버는 분리가 필요하다고 생각합니다. 클라우드 네이티브 환경이라고 달라질건 없죠. WAS등 Backend는 사용자가 직접 연결이 가능한 레이어에 있으면 안되죠.
이미 ALB라던지 CDN이라는 것들이 웹서버가 해줬으면 하는 부분들을 다 해주고 있는데, 굳이 저것을 고집하는 이유를 모르겠네요. 여러분들은 혹시 실질적으로 웹서버가 있었기에 막을 수 있었던 보안 같은게 있으신가요?