본문 바로가기

Server

[Server] 웹 서버 vs 웹 어플리케이션 서버(WAS) vs API 서버

반응형
SMALL

 

글을 시작하기 전에

최근 2년 간의 서버 개발 경험을 개인적으로 정리하다가 여러가지 개념이 헷갈리기 시작했다. 내가 개발한 서버는 어떻게 불리고 있고, 각각의 개념은 또 어떻게 되며, 이게 정말 확실한 지? 새삼 프로젝트 경험은 많지만 내가 개발하고 있는 서버의 이름도 제대로 모르고 있었구나.. 그런 반성을 개인적으로 좀 하게 됐다. 개발자가 되고 싶으면 기본이 탄탄해야 한다고 생각한다. 내가 가지고 있는 지식들에 확신을 갖기 위해서 추가로 학습하고 이렇게 글로 남겨보고자 한다. 주저리주저리 서론이 길었다 ^.^ 진짜 글쓰기 시작!

 


서버 (Server)

개념적으로 "서버"란 무엇일까? 여러 블로그 글들을 조금만 찾아봐도 서버는 클라이언트에게 네트워크를 통해 정보나 시스템을 제공하는 컴퓨터 시스템이라는 사실을 알 수 있다. 하지만 개념만 보면 서버가 정말 무엇인지 바로 감이 잘 안 온다. (내가 그랬다..)

 

우리가 온라인 쇼핑을 한다고 생각해보자. 회원가입에 로그인, 장바구니 담기, 마음에 들면 찜(하트), 구매 단계에서 주소와 전화번호 등등 입력까지.. 다양한 데이터가 주고받아진다. 그럼 나중에 다시 들어왔을 때 데이터가 사라지는가? 아니다. 그대로 남아있다. 하나하나 정보를 입력해놓았는데 나갔다 다시 들어오면 사라지는 것이라면, 번거롭게 온라인 쇼핑을 할 사람들은 드물 것이다. 그리고 쇼핑 상품들은? 그것들도 데이터다. 상품은 고정되어 있지 않다. 품절이 될 수도 있고, 새로운 상품이 생길 수도 있다. 이렇듯 클라이언트라고 불리는 사용자들이 원하는 정보들을 제공해주는 것이 서버의 역할이다. 즉, 서버는 누군가에게 서비스를 제공한다.

 

서버의 종류는 굉장히 다양하다. 웹 서버, 도메인 서버, DB 서버, 게임 서버 등등.. 아주 많다! 궁극적으로 서비스를 제공하는 역할은 동일하지만, 그 성격들이 다양하다.

 

그 중에서도 이번 글에서는 웹 서버, 웹 어플리케이션 서버, 그리고 API 서버에 대해서 다뤄보고자 한다.

최근 개인적으로 헷갈려했던 개념들이다. 내가 이해한 과정들을 글로 남겨볼 것이다.

 


웹 서버(WS) vs 웹 어플리케이션 서버 (WAS)

둘의 차이는 static과 dynamic의 차이에 있다. 웹 서버는 정적인(static) 컨텐츠를, WAS는 동적인(dynamic) 컨텐츠를 제공한다.

 

Static

만들어놓은 그대로를 제공하는 것이다. image, html, css 등 이미 저장되어 있는 파일을 "그대로" 보여준다. 따라서 어떤 사용자(클라이언트)라도 같은 요청을 했을 때, 모두에게 항상 동일한 정보를 제공한다.

웹 서버에서는 이러한 정적인(static) 컨텐츠를 제공한다.

 

Dynamic

요청에 따라 추가적인 데이터 처리가 이뤄진 컨텐츠를 제공하는 것이다. 일반적으로 데이터베이스(DB)가 필요하면 동적이라고 이해해도 좋다. 사용자(클라이언트)와 그 요청에 따라서 서버 로직 내부에서 데이터 가공이 처리된 후 반환된다. 예를 들어, 두 사용자가 똑같이 자신의 개인정보를 보겠다는 같은 요청을 했는데, 그 결과는 사용자에 따라 다른 것과 같다.

웹 어플리케이션 서버에서는 이러한 동적인(dynamic) 컨텐츠를 제공한다.

 

본격적으로 두 서버의 차이를 알아보자. 위 그림과 함께 보면 이해가 더 쉬울 것이다.

 

웹 서버 (Web Server)

클라이언트가 요청한 정적인 컨텐츠를 HTTP를 통해 제공해주는 서버이다.

 

그렇다면 동적인 요청은 처리하지 못하는 것일까? 당연히 아니다. 다만 동적인 요청은 정적인 요청과는 좀 다르게 동작한다.

웹 서버에서는 정적인 요청만 처리할 수 있기 때문에, 도움을 구해야 한다. 컨테이너(Container)에게 그 도움을 구한다. 컨테이너에게 동적인 요청을 넘겨주면 컨테이너에서 처리한 결과를 받아 클라이언트에게 제공한다.

 

*컨테이너(Container): 서블릿의 생명 주기를 관리하고, JSP를 서블릿으로 변환하는 기능을 지닌 프로그램

*서블릿(Servlet): 자바를 사용하여 웹을 만들기 위해 필요한 기술로, 클라이언트의 요청에 대한 응답을 전송하는 역할을 수행한다.

*JSP: HTML 내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹페이지를 생성하여 웹 브라우저에 돌려주는 서버 사이드 스크립트 언어

 

웹 서버의 예시로는 Nginx, Apache 등이 있다.

 

웹 어플리케이션 서버 (Web Application Server)

웹 서버로부터 오는 동적인 요청을 처리하는 서버이다. WAS = Web Server + Web Container 라고 생각하면 편하다.

즉, 웹 서버로부터 동적인 요청을 받아 처리하고, 응답 결과를 웹 서버에게 다시 돌려주면 웹 서버는 받은 결과를 클라이언트에게 보여준다.

 

동적인 요청을 처리하는만큼 그 기능도 WS와 비교해서 다양하다.

  • 프로그램 실행 환경과 데이터베이스 접속 기능을 제공한다.
  • 여러 개의 트랜잭션을 관리한다.
  • 업무를 처리하는 비즈니스 로직을 수행한다.

 

웹 어플리케이션의 예시로는 Tomcat, Jetty 등이 있다.

 

WAS는 혼자 다 하면 되지, 왜 또 WS를 따로 사용하는가?

  • 기능을 분리하여 서버 부하를 방지한다. 정적인 요청까지 WAS에게 맡겨버리면 부하가 커질 수 있다. 정적인 컨텐츠는 웹 서버에게 맡겨 빠르게 처리하는 편이 좋다.
  • 물리적으로 분리하여 보안을 강화한다. SSL에 대한 암호화/복호화 처리는 웹 서버를 사용한다고 한다.
  • 여러 대의 WAS를 이용해 로드밸런싱 용도로 사용할 수 있다. 대용량 서버일 경우, WAS와 WS를 분리하여 특정 WAS에 오류가 발생할 경우, 다른 WAS를 사용함으로써 무중단 운영을 가능하게 할 수 있다.

 


웹 어플리케이션 서버 vs API 서버

둘의 차이는 웹의 제공 유무이다. 위에서 확인할 수 있듯이 WAS는 웹 페이지를 제공하고, API 서버는 데이터 통신이 목적이다.

 

웹 어플리케이션 서버 (WAS)

  • 웹을 제공하는 서버
  • 클라이언트가 요청을 했을 때 웹을 넘겨주기 전 코드를 미리 실행할 수 있다.
  • SSR 방식과 CSR 방식이 있다.
    • SSR(Server Side Rendering): 서버에서 이미 렌더링한 상태로 클라이언트에게 전달한다. (화면을 볼 수 있음)
    • CSR(Client Side Rendering): 서버에서 처리없이 HTML, JS 등을 전달한다. (다운로드 끝나기 전까지 못 봄)

 

API 서버

  • 데이터 통신을 위해 사용하는 서버
  • 보안을 위해 API 서버, 서비스 관리자, 허용 IP 등 권한이 있는 대상에게만 접근을 허용한다.
  • 다른 애플리케이션에 데이터를 제공할 수 있다. (Ex. 모바일 앱은 API 서버를 통해 데이터에 접근할 수 있음)

 


결론

다 같은 서버지만, 각자 다르다! 위 내용을 정리한 표를 아래에 소개하며 글을 마친다.

 

  웹 서버 웹 어플리케이션 서버 API 서버
목적 정적 파일 제공 웹 애플리케이션 실행 데이터 제공 및 소비
처리 대상 HTML, CSS, image 등
정적인 컨텐츠
JSP, Servlet, Java 코드 등
동적인 컨텐츠
JSON, XML 등
데이터를 포함한 Body 컨텐츠
기능 웹 페이지 제공 로그인, 댓글 등 동적인 기능 제공 DB 연동, 다른 애플리케이션과의 통신
예시 Nginx, Apache 등 Tomcat, Jetty 등 RESTful API 등
프로토콜 HTTP HTTP, HTTPS HTTP, HTTPS
보안 기본적인 보안 기능 보다 더 강력한 보안 기능 API 키, OAuth 등을 통한 보안
사용 예시 정적 웹 사이트, 간단한 블로그 온라인 쇼핑몰, SNS 모바일 앱, 웹 서비스

 


References

https://hompion.com/blog/%EC%84%9C%EB%B2%84server%EC%9D%98-%EA%B0%9C%EB%85%90%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90/

https://mangkyu.tistory.com/14

https://studium-anywhere.tistory.com/19

https://binux.tistory.com/32#recentComments

https://velog.io/@beegoat/Web-%EC%9B%B9%EC%84%9C%EB%B2%84-API-%EC%84%9C%EB%B2%84

https://hahahoho5915.tistory.com/52

반응형
LIST