-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
프론트 서버 #26
Comments
웹 환경에서는 브라우저가 클라이언트 역할을 합니다. 서버에 요청을 보내면 서버가 요청에 대한 응답을 하는데 이때, 보통은 프론트 서버와 백엔드 서버로 나누어집니다. 프론트 서버는 어떤 주소에 대한 요청을 보냈을 떄, 마크업 요소(html,css)를 보내줘서 사용자에게 GUI환경을 제공해주는 서버입니다. 반대로 백엔드 서버는 프론트 서버와 통신하는 컴퓨터로 볼 수 있는데 사용자가 프론트서버에서 어떤 동작을 하였을 때, 사용자 정보나 해당 어플리케이션의 데이터에 접근하는 것을 가능하게 해주는 서버입니다. |
왜 굳이 두 서버를 분리하나요? 같이 한 서버에 둬서 개발하면 안되나요? |
데이터가 많아지면 분리해서 컨트롤 하는 것이 좋습니다. 서버를 한 곳에 모아두면 그만큼 서버가 바빠지기 때문에 속도가 느립니다. 뿐만아니라 분리해서 관리하면 변경에도 용이한 환경을 만들 수 있습니다. 하지만 프론트,백엔드 서버 분리의 문제점도 존재합니다. 프론트와 백엔드를 분리해서 통신하게 되면 각각 다른 컴퓨터가 서로 통신을 하는 것이기 때문에 CORS 문제가 발생합니다. 따라서 서버에서 프론트 요청을 허용해주는 작업을 따로 해주어야 합니다. |
그렇다면 프론트 서버의 개발을 위해 서버를 선택해야 하는데...웹 서버는 어떤 종류가 있나요? 또 각 서버의 특징은 무엇인가요? |
웹 서버에는 다양한 종류가 있지만, 주로 사용하는 웹 서버는 Apache HTTP server, nginx, IIS이 존재합니다. Apache HTTP server 의 경우에는 확장성이 상당히 좋은 웹서버 입니다. 모듈이라는 개념을 이용해서 수 많은 기능을 덧붙일 수 있습니다. 뿐만 아니라 오픈소스 소프트웨어로써 Linux, Unix, Window, FressBSD 등등 거의 모든 운영체제에서 설치 및 사용이 가능합니다. 하지만 쓰레드/프로세스 기반 구조로 요청 하나당 쓰레드 하나가 처리하는 구조로써 사용자가 많으면 많은 쓰레드를 생성하게 되어 메모리와 CPU 낭비가 심합니다. 즉, 하나의 쓰레드 = 하나의 클라이언트 구조를 가집니다. 최근에는 이러한 이유로 무겁다는 평을 받고 있습니다. nginx 의 경우에는 더 적은 자원으로 더 빠르게 서비스로 알려진 웹서버 입니다. 가벼움과 높은 성능을 목표로 만들어 졌으며 최근에는 점유율 1위를 기록하는 상승세 웹서버 입니다. Apache와 다르게 비동기 이벤트 기반의 구조로써, 다수의 연결을 효과적으로 처리가 가능합니다. 더 작은 쓰레드로 클라이언트의 요청 처리가 가능하고 결과적으로 대부분의 코어 모듈이 적은 리소스로 빠르게 동작이 가능합니다. 하지만 확장모듈이 Apache보다 적어서 확장성 면에서 떨어질 수 있지만 Apache 확장 모듈을 제대로 쓰는 사람이 드물기 때문에 큰 문제가 되지 않습니다. 가장 큰 문제는 윈도우용 nginx입니다. 아직도 불완전한 버전이라서 본래의 성능이나 확장성을 발휘하지 못하고 UDP 관련 기능도 지원하지 않습니다. IIS는 마이크로 소프트 윈도우에서 사용 가능한 웹 서버 소프트웨어입니다. 윈도우서버에 기본으로 내장되어 있으며 무료로 사용이 가능하기 때문에 윈도우 서버와의 호환성이 상당히 높습니다. 뿐만아니라 지원 폭이 넓은 소프트웨어로써, 웹서버 뿐만 아라 메일서버, FTP서버, 뉴스그룹 서버도 지원합니다. 또한 다른 웹서버와 달리 GUI를 기본 지원하기 떄문에 사용이 어렵지 않습니다. 게다가 예상되는 부하의 범위와 이에 대한 응답을 바탕으로 한 튜닝 기능도 존재합니다. 하지만 오픈소스인 리눅스 기반의 Apache, nginx와 달리 윈도우만 지원하기 때문에 MS에 의존성이 높아지기 쉽습니다. 뿐만아니라 Windows Update Site를 방문해 수시로 업데이트를 확인해야 하고 보안패치가 무겁고 늦게 나온다는 단점이 존재합니다. 이외에도 Google web server(GWS), Lighttpd, Mongoose, WebtoB, Zeus 등등이 존재합니다. 점유율 같은 경우, 2020년 2월 기준으로 nginx(36.48%), Apache(23.98%), Microsoft(14.03%), Google(3.02%)을 차지합니다. |
그렇군요... 제 프론트 서버에 사용하기에는 nginx나 IIS가 괜찮아 보이네요. 많은 기능을 필요로 하지 않기 때문에 가볍고 빠른 nginx나 윈도우 환경에서 개발한다는 측면에서 IIS가 괜찮아 보이네요. 저번에 비동기 이벤트 기반인 node.js를 공부해봤던 경험이 있던 터라, 아무래도 비동기 이벤트 기반 서버인 nginx와 node.js를 접목시켜서 비동기 이벤트 기반의 서버를 만들면 재밌을것 같아요. 감사합니다. |
너무 많은 사용자가 아니라면 백엔드 서버에 프론트 빌드의 결과물을 올려서 사용해도 좋을 것 같아요! |
닫아도 될까요? :) |
내용 조금만 더 수정/추가 하고 닫겠습니다! |
머시써요 👍 |
프론트 서버? 백엔드 서버? 정확한 개념이 궁금해요
The text was updated successfully, but these errors were encountered: