# 웹서버[Web Sever]란?

 웹서버의 정의는 명확하다. 위키피디아 에 따르면, HTTP 요청을 받아서 HTML 문서와 같은 웹 페이지를 반환하는 프로그램 이 웹서버이다. 이미지, JS 파일, CSS 파일 등 무언가 파일을 전송해주는 기능 역시 웹서버의 중요한 기능이지만, 결론적으로는 HTML 을 제공해주는 것이 웹서버의 핵심 역할이다.

 웹서버란 Was까지 포함해서 부른다.(뇌피셜) (좀 더 정확한 명칭으로 업계에서는 WAS, 웹 어플리케이션 서버 라는 명칭을 쓴다) 

 SPA 의 경우에는 조금 상황이 다르다. SPA 에서는 웹서버에서 HTML 을 제공하는 것이 아니라 단지 데이터만을 제공하고, 그 데이터를 자바스크립트에서 동적으로 렌더링하여 HTML 을 만들어낸다. 그래서 크롤러에 의해 인지되기 어렵다는 단점이 존재한다.


# API서버[Web API Sever]란?

 HTTP 요청을 받아서 JSON 과 같은 데이터를 반환하는 프로그램. 그래서 조금 더 정확한 명칭은 Web API 서버 정도인 것 같다. 이 글에서는 커뮤니티에서 많이 사용되는 용어인 API 서버


# 전통적인 Web 개발 언어의 공통점

전통 강자 : JSP, PHP, ASP

이 세가지 언어는 동적으로 HTML 을 만들어주는데에 도움이 되는 언어들이다. 

오랜 기간 존재해왔고, 소프트웨어의 신뢰성 또한 오랜 기간동안 많은 사람에 의하여 검증되었다.


신흥 강자 : Ruby, Python, Node, Go 등

이들 모두는 ‘웹서버’ 를 개발하는데에 사용되는 언어들이다.

무슨 선택을 하던 각자의 상황에 맞는 것을 고르면 되지만, 두 분류는 지향하는 바에 있어서 상당한 차이가 있다.


JSP, PHP, ASP : ‘웹서버’ 를 개발하는 것이 아니라, 웹서버에서 동작하는 ‘스크립트’ 를 개발하는 것.

(Apache,IIS와 같은 별도 웹서버 프로그램 필요, Tomcat과 같은 Was 프로그램 필요)

- JSP 의 경우는 대개 Tomcat 이나 Wildfly 에서 동작하는 Java 바이트코드와 JSP 파일 

  -> 반드시 Tomcat 과 같은 별도의 Was server 프로그램 실행이 필요함

- PHP 의 경우는 php-fpm 이나 libapache2-mod-php 같은 외부 CGI 프로세스

  -> 반드시 php-fpm과 같은 별도의 Was server 프로그램 실행이 필요함

- ASP 의 경우는 C 함수, ASP 는 ASP.NET 의 경우 .NET 에서 동작하는 바이트코드를 만들어내는 스크립트 파일

  -> .Net과 같은 별도의 Was server 프로그램 실행이 필요함


Ruby, Python, Node, Go 등 : ‘웹서버’ 자체를 개발하는 것

(Apache,IIS와 같은 별도 웹서버 프로그램 불필요)


<차이점>

- Apache 또는 Nginx 또는 IIS 등의 웹서버에서 대신 URL 을 보고 해당하는 처리 로직으로 넘기도록 설정,

해당 처리 로직에서는 개발한 스크립트가 동작하도록 하는 것이다. 그래서 서버를 중단시키지 않고도 필요한 부분의 파일만 딱 교체할 수도 있다.

- 파이썬 Flask 같은 언어에서는 URL요청(Decorator 사용) 처리 부분과 실제 처리로직 모두를 구현해야 함

HTTP 요청을 처리하는 로직도 만들어야 한다. 제대로 된 요청에는 HTML 을 반환하고 잘못된 요청에는 에러를 반환하는 등의 처리를 전부 Python 코드로 작성, 수정 시 서버가 잠시 중단되어야 한다. 다운타임이 생기면 안되는 서비스에 Node.js 로 서비스를 하는 것은 최선의 선택이 아니다.



# 신규 개발 방법

- Ruby/ Python/ Node/ Go 등을 이용해서 웹서버를 만들어도 되고, 순전히 API 서버로만 사용하고 React, Angular, Vue 등을 이용하여 SPA 를 구성

개인적으로 가능하다면 React 로 구성하는 유니버설 어플리케이션이 제일 극강의 구조를 가지고 있다고 생각한다. 이 의미는 Node.js 를 이용하여 웹서버와 API 서버를 구축하고, React 를 서버 사이드에서도 렌더링 하도록 Node.js 를 개발하는 것


웹서버 개발? JSP, PHP, ASP 도 충분히 좋다 (JSP 는 개발환경에서 많은 리소스를 소모한다는 단점이 있긴 하다). 오히려 다른 언어들보다 더 좋다고 생각한다. 다만 조금 더 세부적인 내용을 이해하고 사용하도록 하자. 나라면 엔터프라이즈 레벨 및 협업에는 PHP나 JSP를, 개인적으로는 Go를 사용할 것이다.


API 서버 개발? 아마 높은 확률로 JSP, PHP, ASP 는 최선의 선택이 아닐 것이다… Python 이나 Node.js, 그리고 무엇보다도 Go 가 최강의 성능을 자랑한다.


React 유니버설 어플리케이션은 다양한 상태를 갖는 복잡한 웹 어플리케이션을 제공하기 위한 최강의 서버이다. 근데 만들기는 너무 너무 어렵다 (그래서 next.js 등을 이용하면 굉장히 편해지기는 한다).

 

# 출처

https://blog.kesuskim.com/2018/09/web-development-in-2018/


'[DEV] Developer 회고' 카테고리의 다른 글

DDD(Domain Driven Development)란?  (0) 2020.11.19
Event Sourcing의 개념  (0) 2020.11.19
Quartz Cron vs 일반 Cron 비교  (0) 2020.08.06
Window 개발시, 유용한 Tip  (0) 2020.07.27
웹훅[Webhook]이란?  (0) 2020.07.09
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기