node.js 로 서버를 만든다는 개념에 대한 질문

node.js 로 서버를 만든다는 개념에 대한 질문

작성일 2020.12.31댓글 1건
    게시물 수정 , 삭제는 로그인 필요

안녕하세요. 웹개발 관련하여 학습중인데 서버를 만든다는 개념이 잘 와닿지 않아서 문의드립니다.

먼저, 제가 이해하고 있는 서버 개념은 물리적인 공간으로서의 서버로 이해하고 있는거 같아요.

기존에 자바스프링으로 웹프로젝트를 만들어서 로컬에서도 사용해보고
AWS 로 배포까지 했었는데요.

먼저 전자의 경우엔 제 로컬 컴퓨터를 톰캣을 이용해서 서버처럼 사용하는 거였고,
후자의 경우에는 AWS의 EC2 라는 클라우드 컴퓨팅을 서버로 활용해서 역시 파일질라로 프로젝트 파일 업로드하고, 톰캣 실행해서 EC2를 서버로 활용했자나요.

그래서 node.js 를 공부하려고 하면서 이걸로 서버를 만든다는 개념이 잘 와닿지가 않는데
앞에 프로젝트 했던걸 기준으로 대치해본다면

node.js 는 일종의 톰캣이나 nginx 처럼 서버를 구동하게하는 프로그램을 대체하는 언어인건가요?
아니면,

스프링이전에 jsp/servlet 처럼 서버페이지를 구동하게하는 언어를 대체하는건가요?
또는 스프링내에서 서버의 동작을 구현하는 자바소스코드를 대체하는건가요?

다시 정리하자면,

기존에 자바 웹 프로젝트를 로컬또는 클라우드 컴퓨팅에서 톰캣이나 NGINX 를 활용해 웹서버를 돌렸다면

다시 동일한 프로젝트를 node.js 로 서버를 구현한다면 여기서
어느 부분과 대치가 되는 것인지 궁금합니다. 

답변 부탁드립니다. 감사합니다. 


#node.js 로고 #node.js 로그인 구현 #node.js 로드밸런싱 #node.js 로그인 #node.js 로그 확인 #node.js 로드맵 #node.js 로컬 서버 #node.js 로 mqtt broker 서버 만들기 #node js 로그인 기능 구현 #node js 로그

profile_image 익명 작성일 -

질문자님의 질문의 장황하여 고민이 많이 되네요.

세상에 용어가 모호한 경우가 많은데, IT에서는 server 라는 이름이 상당히 많은 의미를 가지고 있어서

이걸 설명하려면 초 장문이 될 것 같아서... 아마도 다른 분들도 답변을 꺼렸을 것 같네요.

그냥 질문자님의 질문을 짧게 요약해서 분석하자면

질문자님의 혼동의 발생은 TCP/IP 의 server 개념을 익히기 전에 web 을 먼저 접하셔서 발생한

그런 문제라고 생각됩니다.

1) 물리적인 컴퓨터 1대, 혹은 cloud에서 생성한 Virtual Machine(VM) 한대도 server라고 하긴 합니다.

2) TCP/IP 에 의한 네트워크 개념에서 server란 특정 포트를 "bind" 하면서 외부의 많은 "client"가 접속을 하는 것을 받아서 그곳에서의 "request"를 처리해주는 것을 통칭합니다.

앞에서 전제로 깔았듯, 질문자님께서 tcp/ip 에 대한 기본 지식이 부족하다면 서버라는 것 자체가 이해가 안될 수 있을 것 같네요. 그래서 답변 드리기 함 어렵습니다.

//

tomcat을 예를 들어볼께요. tomcat은 특정 포트(8080을 주로 쓰지요)를 bind 하면서 tomcat에 등록(register)한 각종 application(대체로 war 파일)을 띄워서 서비스해주는 역할을 합니다.

그래서 tomcat은 server이면서 container 라는 표현을 많이 씁니다. 컨테이너는 어떤 어플리케이션을 동작할 수 있도록 담아주는 역할을 하지요. tomcat 혼자만 있다면 그냥 해당 포트를 점유하면서 그 포트에 오는 HTTP request에 대해서 주소(URL)을 바탕으로 적절한 값을 돌려주는 역할을 수행해줍니다만..... 예를 들어 뭔가 입력을 받아서 처리하는 로직을 가진 app를 tomcat에 "등록"해주면 해당 주소를 통해서 이것을 서비스할 수 있게 됩니다. tomcaty은 서버이지만, 사실상 껍데기일 뿐인 것이겠지요?

//

node로 건너가보겠습니다. node.js는 단순히 javascript를 이용하여 뭔가 다른 짓(?)을 할 수 있도록 하는 형식의 플랫폼일 뿐입니다. node에 있는 express 같은 모듈을 사용하면 손쉽게 tomcat (혹은 apache) 같은 웹 서버의 역할을 할 수 있도록 도와줍니다. 그러나 node 자체는 원래 그런 용도로 만들어진 건 아닙니다.

그러면, node.js를 이용하여 웹 서비스(서버라는 표현은 뺐습니다)를 만든다면? node.js 는 tomcat이나 apache 같은 이른바 대행 서비스를 통하지 않고, 직접 자기 자신이 그 역할을 수행하게 되는 겁니다.

node.js에서 express를 가져다가 tcp/ip 웹 포트를 bind 하고, 해당 포트로 오는 request을 처리할 수 있도록 하면서 사실상 node.js는 apache나 tomcat이 있어야만 표현할 수 있었던 것을 스스로 다 표현하고 있는 셈입니다.

그래서 node.js를 서버라고 얘기하는게 애매한거죠. node.js를 통해서 tomcat이든 apache이든, php든 간에 그들이 하는 container 역할을 다 빼고, 스스로 컨테이너가 되는 것이며, tomcat 등 수많은 container가 가지고 있는 각종 기능들을 무시(?)하고 필요로 하는 기능만을 구현하여 비교적 light-weight한 "서버"를 구현하기 좋게 만들어줍니다.

//

곧, node.js는 자체는 사실상 console application이지만, express 같은 모듈을 이용하여 웹 서버의 역할을 할 수 있게 되지만... 그 웹 서버들이 가지고 있는 수많은 기능을 포함하지 않는(!) 비교적 원시적 웹 서비스를 구축할 수 있게 되는데요. 이것이 어쩌면 각 웹 서버들(혹은 컨테이너들)이 가진 기능을 버림으로써 가벼운 서비스를 구축 가능하게 되는 것이고요. ㅂㅁㅁ

//

저는 오히려 node.js를 웹 서비스로 사용하기 보다는 그냥 일반적인 tcp/ip 서버로 사용을 많이 했는데요. 곧 node.js가 웹 서비스를 위해서 탄생한 것은 아니라는 의미입니다. 일반적인 그냥 특정 포트를 점유하면서 해당 포트로 오는 request에 대한 처리를 해주는 "server"를 만들 수 있는 겁니다. 예를 들면 게임 서버의 역할이 될 수도 있고요. (게임 서버의 서버는 논리적인 서버입니다)

//

node.js를 사용하여 웹 서비스를 구현한다면 node.js 자체에서 각종 처리(URL 매핑 등)을 스스로 하게 되는데요, 일반적으로 tomcat이든 apache이든 그런 것들을 사용할 때 전혀 신경쓰지 않아도 되었던 일반적인 static resource(예를 들어 html, img)에 대한 처리도 프로그래밍으로 처리해주어야 하는데, 그래서 복잡도는 조금 증가합니다만 node.js를 도입하는 근본 이유는 웹 서버를 light-weight하게 변환하며, 특히 node.js는 single-thread 방식으로 동작하므로 이것의 장점을 극대화하여 모든 CPU의 사용을 극대화하는 용도로 사용된다고 봅니다.

node.js를 분류하면 일종의 서버죠?

node.js를 이해하기 위해 질문드립니다. 블로그 같은 곳에서 node.js에 대해서 공부 하다보니, 개념이 이해가 안 되는데, 1. 일종의 javascript를 돌리기 위한 일종의 서버라고...

node server.js 질문입니다.

아래 코드가 터미널에서 node server.js를 입력하면 서버가 생성되고 이... http 에 대한 기능을 구현하려면 아래와 같아야 합니다. > 위와 같은...

서버를 구성할 때 기초 개념 질문합니...

어플리케이션 서버를 node로 구성하면 요청 기능에 따른 라우터만 작성해주면 되는걸로 알고있습니다. ( 예 : 당근마켓의 상품 목록 리스트 얻어온다면 라우팅은 GET ~~/item )...

node js서버 서비스 질문 입니다.

... 개발하는 입장에선 혼자서 테스트를 진행하니 크게 문제가 없지만, 동시 다발적으로 입력 했을때, 단일 스레드라는 node js 특성상 문제 발생에 대한 의문과 웹서버...

node.js mysql2 세션 질문

node.js에서 페이지로 id변수를 보내고... "); } }); } } } } catch (err) { // 서버에서 예상치... 쿼리문에서 'id'와 'username'의 개념을 혼동하신 것...

node.js 질문좀..

... 무슨차이인지모르겠습니다 3.node.js는 웹서버개발용인가요? 서버대한개념모르니 자세한설명부탁합니다. 안녕하세요 너무 방대한 내용이네요. 다음의 주소를...