티스토리 뷰

안녕하세요. 한장현입니다.


최근 메일로 흥미로운 주제에 대해 질문을 주신 분이 있었습니다.

간단하지 않은 문제라서 고민을 좀 하다가 답변을 드렸는데

다른 분들은 어떻게 생각하시는지 궁금해서 공유해봅니다.



[질문]

안녕하세요.


이제까지 웹이 아닌 윈도우 영역에서만 개발을 해 왔는데 웹에 대한 이해를 할려고 공부중입니다.

다음 프로젝트를 웹으로 개발을 준비해야 할것 같아서 질문을 하나 드렸으면 하는데

누가 안된다면 이에 대한 답변 부탁 드립니다.


제가 계획하고 있는것은 Node.JS+Angular로 웹 애플리케이션 프레임워크를 만들려고 하는데

주위에 알아보면 스프링기반으로 하라고 합니다.

여러가지고 고민스럽고 약간은 혼란 스럽기도 합니다.

백엔드를 Node.JS로 구성하고 프론트엔드를 Angular로 구성할려고 하는데

스프링에도 백엔드와 프론트엔드가 모두 있다고 하는데 두 프레임워크에 대한 장단점을 파악하기가 저로서는 난감한 상황입니다..


그리고 Node + Angular를 선택할려고 한 것은 Javascript + Typescript로 통일해서 구성이 가능하기 때문인데

Spring을 하면 Java로 모두 구성하면 된다고 하는데 이 부분이 조금 이해가 안갑니다.

그럼 javascript를 사용하지 않고 모든 부분이 구성이 되는 것인지 알고 싶습니다.


제가 추구하고자 하는것은 앞으로 발전가능성이 크면서 중간정도 프로젝트 규모에서 안정적으로 

잘 돌아가는 환경, 시간투자대비 생산성에 중점을 둘려고 합니다. 물론 애플리케이션 프레임워크를

잘 만들면 되지만 애플리케이션 프레임워크를 만들어 가는 과정도 고민을 하게 됩니다.


현재 Java(SWT, Swing), Javascript, Typescript 이 셋언어는 가능합니다.

그러나 앞에서도 말씀 드린 바 팀원들의 사용하는것은  C#이며 웹에 대한 

부담갖지 않고 쉽게 따라올 수 있는 방향으로 추진 할려고 합니다.


현 시점에서 Node+Angular를 해야할지 Spring으로 전환을 해야 할지

아니면 또다른 좋은 의견이 있으신지 문의 드립니다.


감사합니다.



[답변]

안녕하세요. 한장현입니다.


Spring은 Java 백엔드 프레임워크이며,

많은 개발자들이 오랫동안 사용하고 유지해왔기 때문에 알려진 버그와 보안 문제는 많이 잡혀있어서 안정성이 우수하다고 볼 수 있습니다.

많은 사람들이 사용하다보니 정형화되어있는 패턴이 있고, 막혔을 때 다른 사람들에게 물어보기 쉬운 것도 장점입니다.

그래서 대기업이나 정부과제에서 많이 사용하죠.


비교적 오래전에 나온 프레임워크지만 DI나 IoC에 대한 개념도 충실하게 들어있습니다.


아키텍트는 패러다임의 문제이며, 구성하기에 따라 달라질 수 있으니 넘어갑니다.

보통 MVC 모델을 사용하는 것으로 알고 잇습니다.




Node.js는 JavaScript 백엔드 프레임워크이며,

운영환경이기도 하지만 이 논의에서는 백엔드 프레임워크로만 생각하겠습니다.


가장 좋은 점은 모든 개발 스택에서 JavaScript를 사용할 수 있다는 것인데,

백엔드부터 프론트엔드까지, 더 확장하면 DB도 JavaScript로 구현할 수 있습니다.


아주 간단한 서버는 코드 10줄 정도로 구현할 수 있다는 것도 장점입니다.



Angular는 프론트엔드 프레임워크이며, 프론트엔드 SPA를 만들수 있는 기능을 다양하게 제공합니다.



일단, 비교 대상이 잘못되었습니다.


백엔드를 Spring으로 개발하더라도 프론트엔드는 뭔가가 있어야 하는데

Spring + Angular도 가능하다는 측면에서는 Spring과 Node.js를 비교해야 하는 것이 맞습니다.

Angular는 온전히 프론트엔드의 영역입니다.

Angular는 이 논의에서 제외하겠습니다.


Spring에 백엔드와 프론트엔드가 같이 있다는 말은

서버의 입장에서 프론트엔드 코드를 보내는 백엔드가 있다는 것을 혼동하신 것 같은데,

그렇다고 해서 Spring 프레임워크가 프론트엔드에 적극적으로 개입하는 것은 아니며,

JSP와 서블릿을 사용해서 프론트엔드를 개발하는 것은 조금 다른 문제입니다.

Spring은 어디까지나 서버 프레임워크입니다.


웹 표준에서 HTML 문서는 DOM 마크업과 JavaScript, CSS로 이루어지며,

JSP와 서블릿을 사용한다면 HTML을 JSP로 컨트롤 할 수 있지만,

이 부분은 JavaScript의 역할을 일부 가져온 것일 뿐입니다.



그렇게 보면 가장 큰 차이는 Java냐 JavaScript냐의 차이이며,

최신 트렌드를 얼마나 반영할 수 있느냐, 안정적이냐, 자유도는 얼마나 있느냐의 문제입니다.


먼저 말씀드린 대로 Spring은 정형화된 패턴 위주로 개발하며, 자유도는 낮지만 같은 이유로 안정성은 높다고 생각합니다.

Node.js는 딱 정해진 패턴은 없으며, npm에 있는 모듈을 활용할 수 있고 JavaScript의 특성상 자유롭게 개발할 수 있습니다.


MVC 모델과 이벤트 드리븐의 차이도 있지만,

MVC 모델에서 HTTP 요청이 들어왔을 때 어떤 로직을 처리한다고 보면 이벤트 드리븐이라고 봐도 크게 다르지 않습니다.



결국엔 개발 언어의 차이인 것 같네요.

Spring을 사용하는 경우에는 Java 외에 프론트엔드에 JavaScript도 사용해야 하며,

DB가 SQL이든 NoSQL이든 이 부분도 Java 외에 다른 언어를 사용해야 합니다.


개발 언어 외에, 처리하는 데이터 객체도 각 스택마다 다릅니다.

SQL로 가져온 데이터는 Java에서 데이터 오브젝트(DO)로 처리하고, 프론트엔드에서는 JSON으로 처리합니다.



하지만 Node.js을 JSON NoSQL와 함께 사용하는 경우 모든 스택이 JavaScript를 사용합니다.

DB에서 JSON 객체를 가져와서 백엔드에서 JSON으로 처리하고 프론트엔드에서도 JSON으로 처리합니다.

Node.js의 개발 스택 중 가장 인기 있는 MEAN 스택은 이것이 가장 큰 장점이라고 생각합니다.



"중간정도 프로젝트 규모에서 안정적으로 잘 돌아가는 환경"이라는 말은 좀 애매하네요...

보통 Spring은 엔터프라이즈급 프로젝트에 적합하다고 하고,

Node.js는 빠르게 개발하는 프로젝트나 프로토타입에 적합하다고 생각합니다.


Spring에 비해 Node.js가 나온지 얼마 되지 않았기 때문에 정형화된 패턴은 아직 보지 못한 것 같네요.



"시간투자대비 생산성"의 측면에서는 잘 아는 언어와 프레임워크를 사용하는 것이 당연히 좋습니다.

어떻게 개발해야 하는지 막혔을 때 찾아보기 쉬운 것은 Spring이라고 생각합니다.

적은 양의 코딩으로 빠르게 개발할 수 있는 것은 Node.js라고 생각합니다.




어떤 프레임워크와 어떤 개발 언어를 선택해야 하느냐에 대한 문제는

프로젝트 상황과 팀 구성요소의 실력에 따라 다르며 딱 정해진 답을 드릴 수는 없겠네요 ㅎㅎ;;


프론트엔드만 해도 수많은 선택지가 있는 것이 또 어려운 점이죠 ㅠㅠ


저는 스프링을 썼을 때보다 Node.js + Angular로 개발하는 것이 더 재미있었습니다 ㅎ


아무쪼록 현명한 선택을 하셔서 즐겁게 개발하시길 바랍니다.



고맙습니다.



* 3줄 요약

- 비교는 Spring과 Node.js를 하는 것이 맞습니다.

- Spring은 안정성, Node.js은 개발 언어와 데이터 객체를 풀스택으로 구성할 수 있다는 점이 가장 큰 장점이라고 생각합니다.

- 생산성은 개발자들이 익숙한 언어로 하는 것이 가장 좋겠죠.



결국 프로젝트와 팀원에게 가장 맞는 기술 스택을 선택하라고밖에 말씀드리지 못했는데..

이 글을 보시는 분들은 어떻게 생각하시나요? ㅎ

댓글
  • 프로필사진 우리의시대 궁금하던 내용을 찾던 중에 큰 도움 받고 갑니다. 감사합니다^^ 2017.10.07 21:28 신고
  • 프로필사진 나그네 좋은글이네요 감사합니다!
    spring으로만 지금 현업에서 개발하고 있는중이라.
    node.js 백엔드 개발 꼭 한번 개발해보고 싶어지네요 ^^

    아 그리고 angular 번역서 너무 좋습니다!!
    2017.11.18 16:55 신고
댓글쓰기 폼
공지사항
Total
254,496
Today
221
Yesterday
256
링크
«   2018/04   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          
글 보관함