SlideShare a Scribd company logo
JAVA (Spring)
vs
Javascript (Node.js)
1. 언어별 구조 및 특징 – Node.js
2. 언어별 구조 및 특징 – JAVA
3. 성능 벤치마크
4. 결론
1. 언어별 구조 및 특징
Node.js
구조 및 특징
1. 싱글 쓰레드, 이벤트 루프
2. 동적 타입언어
3. LIBUV 이용, I/O 작업에 특화
(Network I/O, Database I/O, File I/O, etc...)
4. NPM의 수많은 모듈 (But. 검증되지 않은 모듈 또한 많음)
5. 한 언어만으로 Client(Web) - Server 프로그래밍 가능
(React Native 를 이용 모바일도 개발 가능)
Node.js
구조
1. 싱글 쓰레드, 이벤트 루프
Node.js
클라이언트의 요청이 들어오면 Event Queue로
들어온 요청은 Event Loop 에서 처리
Blocking I/O 가 일어나게 되면 Worker Thread
(Internal Thread) 에 의해 별도 처리
완료된 작업은 Event Loop 에 의해 응답
구조
1. 싱글 쓰레드, 이벤트 루프
Node.js
요청을 싱글 쓰레드에서 처리하므로
요청의 로직이 오래 걸리는 경우
뒤 따르는 요청을 처리하지 못한다.
특징
2. 동적 타입언어
Node.js
Interpreter 언어 (JIT 에 의해 컴파일 될 수 있음)
타입이 실행 중 결정 (실행 중 타입 오류가 발생하여 타입체크 필요)
보완하기 위한 TypeScript 등이 존재
… 그만큼 자유롭게 쓸 수 있다(?)
특징
3. LIBUV 이용, I/O 작업에 특화
Node.js
특징
4. NPM(or Yarn) 의 수많은 모듈 (But. 검증되지 않은 모듈 또한 많음)
Node.js
NPM 에서는 매주 120억 건의 다운로드가 발생 (2019년 10월 기준)
관리가 되고 사용자가 많은 모듈은 안정성이 확보되었으나
매우 많은 모듈이 생기고 사라지는 만큼 일정량의 다운로드 수를 가진
안정적인 모듈을 선택해야 함
특징
5. 한 언어만으로 Client(Web) - Server 프로그래밍 가능
Node.js
2019년 까지
8가지 이상의 웹 백앤드 프레임워크
대표적으로 Express, Next.js, Koa 등…
특징
5. 한 언어만으로 Client(Web) - Server 프로그래밍 가능
Node.js
모바일, 데스크탑과 프론트앤드 개발이 가능한 프레임워크들
대표적으로 React Native(Android, iOS), Electron(Windows, MacOS), React, Vue.js 등…
활용
작은 기업에서는 빠르게 개발하기 위해 많이 사용 (생산성 ↑)
대기업 중에서는 주로 특정 부분만 Node.js 를 사용함
(ex. Netflix – https://www.youtube.com/watch?v=B90OabhYJpA&t=12m11s)
Node.js
2. 언어별 구조 및 특징
JAVA
구조 및 특징
1. 멀티 쓰레드 프로그래밍
2. 정적 타입언어 (컴파일 언어)
3. 객체지향 설계가 잘되어 Business Logic 에 특화
4. Java NIO 를 이용 I/O 성능을 올릴 수 있음 (ex. Netty)
5. 검증된 Spring Framework 가 있음
6. 많은 인력 Pool
7. 한 언어만으로 Mobile - Server 프로그래밍 가능
JAVA
구조
1. 멀티 쓰레드 프로그래밍
JAVA
클라이언트의 요청이 들어오면 쓰레드 할당
개별 쓰레드에서 요청 처리
Blocking I/O 가 일어나게 되면 쓰레드는 대기
상태로 빠짐
응답 후 쓰레드 풀에 쓰레드 반환
구조
1. 멀티 쓰레드 프로그래밍
JAVA
동시에 대량으로 발생하는 클라이언트의 요청을
처리하는 것이 어렵다. (쓰레드 개수의 한계)
요청마다 쓰레드를 이용하기 때문에 각 요청에 따른
메모리를 사용하게 된다.
클라이언트의 요청은 사용 가능한 쓰레드가 있을 때
까지 기다려야 한다.
Blocking I/O 작업으로 시간이 낭비된다.
특징
2. 정적 타입언어 (컴파일 언어)
JAVA
대부분의 인기 있는 언어 중 상당 수는 컴파일 언어
그 중 2위(약 5년간 1위 였음)
컴파일 시에 타입이 결정
(오타로 인한 문제 발생률 낮음)
Primitive Type 에 대해서는 Type Safe 하지만
Reference Type 에 대해서는 완전히 Type Safe 하지는 않음
특징
3. 객체지향 설계가 잘되어 Business Logic 에 특화
JAVA
대표적인 객체지향 프로그래밍 언어
장점 : 재사용성, 생산성, 유지보수의 용이성
단점 : 실행 속도, 처음 개발 시 설계까지 오래 걸림
비즈니스 로직?
하나의 프로젝트나 어플리케이션은 로직(Logic)이라고 불리는 수많은 논리적 흐름으로 이루어
집니다. 데이터를 읽어오거나 저장하고, 이 데이터를 가공하여 사용자에게 의미있는 정보를 보
여주거나 네트워크를 통해 요청을 보내고 받는 행위들은 모두 로직이 모여서 이루어낸 결과물
입니다. 이들 중에서 어플리케이션이 제공하고자 하는 서비스나 업무를 직접적으로 구현하는
로직을 비즈니스 로직(Business Logic)이라고 부릅니다.
특징
4. Java NIO 를 이용 I/O 성능을 올릴 수 있음 (ex. Netty)
JAVA
비동기 Non-blocking 개발을 할 수 있음
Netty 는 Node.js 의 이벤트 루프와 비슷한 구조로 동작
구글 gRPC 에서도 내부적으로 Netty 를 사용
특징
5. 검증된 Spring Framework 가 있음
JAVA
JAVA 엔터프라이즈 개발을 위한 오픈소스(Open Source) 어플리
케이션 프레임워크
전자정부 표준프레임워크의 기반
Spring Security, JDBC, JPA, Cloud, AMQP 등 상용 서비스를 위한
기본 라이브러리들이 개발되어 있음
특징
6. 많은 인력 Pool
JAVA
잡코리아와 사람인에서 웹 개발자를 검색하면
대부분 JAVA 개발자
그만큼 경력자와 신입을 뽑기 수월함
잡코리아
사람인
특징
7. 한 언어만으로 Mobile - Server 프로그래밍 가능
JAVA
JAVA 를 이용 Spring (Server) – Android (Client) 개발이 가능
사실상 JVM 이 올라갈 수 있는 어느 곳이든 사용 가능함
활용
대부분 대기업에서 주 서비스 개발 언어로 JAVA 를 선택
JAVA
3. 성능 벤치마크
성능 비교
Node.js (14.4.0) JAVA (14.0.1)
Response(s) Memory (KB) CPU (%) Response(s) Memory (KB) CPU (%)
Regex-redux 4.27 1,064 4/2/75/47 5.75 647 82/88/77/77
Mandelbrot 4.01 86 98/98/99/98 4.14 71 99/99/98/98
Spectral-norm 1.68 62 89/90/91/90 1.57 39 96/94/95/95
Fannkuch-redux 12.10 57 98/98/99/99 10.61 34 99/99/99/98
N-body 8.35 35 1/100/0/0 6.74 36 100/1/0/0
Reverse-complement 2.19 1,340 48/55/50/50 1.58 677 55/74/48/61
Pidigits 1.32 36 3/2/8/100 0.94 36 98/5/2/9
Fasta 2.04 67 76/85/75/74 1.27 45 82/83/73/70
Binary-trees 5.83 1,204 86/82/84/85 2.48 2,496 78/91/74/75
K-nucleotide 15.06 398 76/60/48/92 4.57 485 77/74/83/82
2 1 4 4
출처 : https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/javascript.html
이 벤치마크에서 JAVA 가 일부의 경우를 제외하고 대부분은 Node.js 보다 조금 빨랐다.
또한 Node.js 는 속도가 빠르더라도 계산하기 위해 2배 가까이 메모리를 사용하는 경우도 보였다.
알고리즘
성능 비교
JAVA Node.js
Nodejs 91,799 play2-java-jpa-hikaricp-netty 85,449
nodejs-mysql 50,692 Spring 27,339
express-mysql 44,166 Spring-webflux-jdbc 22,528
출처 : https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=fortune
프레임워크 별 최고 초당 응답률 비교
초당 응답률 1
JAVA Node.js
Nodejs 3,680 Spring 9,099
nodejs-mysql 1,573 Spring-webflux-jdbc 9,349
express-mysql 1,413 play2-java-jpa-hikaricp-netty 5,434
출처 : https://www.techempower.com/benchmarks/#section=data-r18&hw=ph&test=update
벤치마크에서 보이듯 최고 속도에 대해서
는 Node.js 가 우세하지만
Netty 를 쓰는 경우 JAVA 보다 느림
데이터 업데이트 속도의 경우 JAVA 와 몇
배 이상 차이가 나기 시작한다
프레임워크 별 데이터 업데이트 속도 비교
성능 비교
출처 : https://www.techempower.com/benchmarks/#section=data-r18&hw=ph&test=update
단순 JSON 응답이나 피보나치 수열 계산에서
Node.js 의 성능이 살짝 우세하다
또한 1 Core (저사양) 에서는 5배 가량 더 빠른 것으로 나타난다.
단순 리스팅의 경우
Node.js 가 3배 가량 빨랐다.
초당 응답률 2
4. 결론
벤치마크는
벤치마크일 뿐이다.
결론
위 벤치마크 조차 서로 다른 결과가 나왔기 때문에 실제 적용
된 어플리케이션의 성능은 또 다를 수 있다.
Node.js 는 마이크로 서비스와 궁합이 좋음
JAVA 는 대규모 서비스 개발에 좋음
I/O 및 커널 사용이 잦은 어플리케이션의 경우 Node.js 를 이용
비즈니스 로직 등이 복잡한 환경에서는 그에 적합한 언어를 사용
(그러나 결국 언어보단 개발자의 역량이 제일 중요하다…)
언어 선택은?
언어별 장단점이 있음
. Reference
Web Framework Benchmarks - https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=fortune
Node js versus Java fastest programs - https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/javascript.html
[Node.js] 자바와 Node.js 의 성능 & 속도 비교 - https://crazia.tistory.com/entry/Nodejs-자바와-Nodejs-의-성능-속도-비교
Node.js at PayPal - https://medium.com/paypal-engineering/node-js-at-paypal-4e2d1d08ce4f
php, nodejs 속도 벤치마크 - https://blog.codens.info/1868
Web REST API Benchmark on a Real Life Application - https://medium.com/@mihaigeorge.c/web-rest-api-benchmark-on-a-real-life-application-ebb743a5d7a3
빠르게 서비스를 개발할 수 있는 Node.js - https://d2.naver.com/helloworld/4994500
JAVA 개발자가 시작하는 NodeJS - https://www.slideshare.net/lahuman1/java-nodejs-196972795
정적타입vs동적타입?? 단순한 언어가 최고!! - https://hamait.tistory.com/845?category=128262
왜 자바 Spring만 뽑나요? 꼭 배워야 하나요? - https://seolin.tistory.com/119
Node.js와 Java와의 서로다른 차이 - https://lts0606.tistory.com/91
Node.js vs Java 구조적 차이 :: 마이구미 - https://mygumi.tistory.com/154
Node JS Architecture – Single Threaded Event Loop - https://www.journaldev.com/7462/node-js-architecture-single-threaded-event-loop
나라별 구인 통계 - http://tech.trenbe.com/?p=515
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기 - https://www.slideshare.net/JohnKim0331/ms-meltingpot-seminar
Node.js의 사용 - 기업에서 노드를 사용하는 방법 - https://code-daniel.tistory.com/65
넷플릭스 Node.js 활용 사례1 - https://www.youtube.com/watch?v=B90OabhYJpA&t=12m11s
넷플릭스 Node.js 활용 사례2 - https://www.youtube.com/watch?v=p74282nDMX8&feature=youtu.be&t=14m25s
자바스크립트 프레임워크 통계 - https://2019.stateofjs.com/ko/
티오베 통계 - https://www.tiobe.com/tiobe-index/
[Spring] 스프링(Spring) 정의 및 특징 정리 - https://goddaehee.tistory.com/156
Netty 시작하기 - http://hatemogi.github.io/netty-startup
Zuul's Journey to Non-Blocking - https://www.slideshare.net/artgon/zuuls-journey-to-nonblocking
견고한 node.js 프로젝트 설계하기 - https://velog.io/@hopsprings2/견고한-node.js-프로젝트-아키텍쳐-설계하기
인프런 JAVA 개발자 로드맵 - https://www.inflearn.com/roadmaps/12
위키백과 : 비즈니스 로직 - https://ko.wikipedia.org/wiki/비즈니스_로직
2019년과 이후 JavaScript의 동향 – 브라우저 밖의 JavaScript 1 - https://d2.naver.com/helloworld/7700312
npm's Laurie Voss: JavaScript - Who, What, Where, Why and Next | JSConf.Asia 2019 - https://www.youtube.com/watch?v=H8IaDYrv-
3E&feature=youtu.be&t=1165
Spring Tutorial – A Java Framework Providing Efficiency - https://www.edureka.co/blog/spring-tutorial/

More Related Content

PDF
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
PDF
CJ프레시웨이 All-in 클라우드 전환 사례를 통해서 알아보는 Modernization성공 사례-오동규, 메가존 인프라 모더나이제이션 그...
PDF
Amazon SageMaker 모델 학습 방법 소개::최영준, 솔루션즈 아키텍트 AI/ML 엑스퍼트, AWS::AWS AIML 스페셜 웨비나
PDF
금융 분야 마이데이터 (My Data) 산업 도입 방안 및 AWS 활용법 – 고종원 AWS 어카운트 매니저, 양찬욱 KB국민카드 팀장:: ...
PDF
20210317 AWS Black Belt Online Seminar Amazon MQ
PDF
AWS Aurora 100% 활용하기
PDF
금융권 고객을 위한 클라우드 보안 및 규정 준수 가이드 - 이대근 시큐리티 어슈어런스 매니저, AWS :: AWS Summit Seoul ...
PDF
20180220 AWS Black Belt Online Seminar - Amazon Container Services
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
CJ프레시웨이 All-in 클라우드 전환 사례를 통해서 알아보는 Modernization성공 사례-오동규, 메가존 인프라 모더나이제이션 그...
Amazon SageMaker 모델 학습 방법 소개::최영준, 솔루션즈 아키텍트 AI/ML 엑스퍼트, AWS::AWS AIML 스페셜 웨비나
금융 분야 마이데이터 (My Data) 산업 도입 방안 및 AWS 활용법 – 고종원 AWS 어카운트 매니저, 양찬욱 KB국민카드 팀장:: ...
20210317 AWS Black Belt Online Seminar Amazon MQ
AWS Aurora 100% 활용하기
금융권 고객을 위한 클라우드 보안 및 규정 준수 가이드 - 이대근 시큐리티 어슈어런스 매니저, AWS :: AWS Summit Seoul ...
20180220 AWS Black Belt Online Seminar - Amazon Container Services

What's hot (20)

PPT
Platform as a Service (PaaS) Providers
PDF
KB국민은행은 시작했다 -  쉽고 빠른 클라우드 거버넌스 적용 전략 - 강병억 AWS 솔루션즈 아키텍트 / 장강홍 클라우드플랫폼단 차장, ...
PDF
Oracle DB를 AWS로 이관하는 방법들 - 서호석 클라우드 사업부/컨설팅팀 이사, 영우디지탈 :: AWS Summit Seoul 2021
PDF
[오픈소스컨설팅] 서비스 메쉬(Service mesh)
PDF
AWS 기반 클라우드 아키텍처 모범사례 - 삼성전자 개발자 포털/개발자 워크스페이스 - 정영준 솔루션즈 아키텍트, AWS / 유현성 수석,...
PDF
고객 경험을 통한 AWS 클라우드 이전을 위한 지름길 - 김효정 (AWS 솔루션즈 아키텍트)
PDF
네트워크 및 엣지 컴퓨팅 분야 신규 서비스 - 최우형, AWS 솔루션즈 아키텍트 :: AWS re:Invent re:Cap 2021
PDF
AWS로 게임의 공통 기능 개발하기! - 채민관, 김민석, 한준식 :: AWS Game Master 온라인 세미나 #2
PDF
Amazon DocumentDB vs MongoDB 의 내부 아키텍쳐 와 장단점 비교
PPTX
MSA ( Microservices Architecture ) 발표 자료 다운로드
PDF
AWS Personalize 중심으로 살펴본 추천 시스템 원리와 구축
PDF
Microservices
PDF
Amazon RDS Proxy 집중 탐구 - 윤석찬 :: AWS Unboxing 온라인 세미나
PDF
AWS Black Belt Online Seminar 2017 AWSへのネットワーク接続とAWS上のネットワーク内部設計
PDF
AWS Summit Seoul 2023 |투자를 모두에게, 토스증권의 MTS 구축 사례
PDF
[最新バージョンの情報がDescription欄にございます]AWS Black Belt Online Seminar 2018 Amazon Connect
PDF
세션 3: IT 담당자를 위한 Cloud 로의 전환
PDF
모두싸인의 AWS 성장기
PDF
Amazon Dynamo DB 활용하기 - 강민석 :: AWS Database Modernization Day 온라인
PDF
AWS DirectConnect 구성 가이드 (김용우) - 파트너 웨비나 시리즈
Platform as a Service (PaaS) Providers
KB국민은행은 시작했다 -  쉽고 빠른 클라우드 거버넌스 적용 전략 - 강병억 AWS 솔루션즈 아키텍트 / 장강홍 클라우드플랫폼단 차장, ...
Oracle DB를 AWS로 이관하는 방법들 - 서호석 클라우드 사업부/컨설팅팀 이사, 영우디지탈 :: AWS Summit Seoul 2021
[오픈소스컨설팅] 서비스 메쉬(Service mesh)
AWS 기반 클라우드 아키텍처 모범사례 - 삼성전자 개발자 포털/개발자 워크스페이스 - 정영준 솔루션즈 아키텍트, AWS / 유현성 수석,...
고객 경험을 통한 AWS 클라우드 이전을 위한 지름길 - 김효정 (AWS 솔루션즈 아키텍트)
네트워크 및 엣지 컴퓨팅 분야 신규 서비스 - 최우형, AWS 솔루션즈 아키텍트 :: AWS re:Invent re:Cap 2021
AWS로 게임의 공통 기능 개발하기! - 채민관, 김민석, 한준식 :: AWS Game Master 온라인 세미나 #2
Amazon DocumentDB vs MongoDB 의 내부 아키텍쳐 와 장단점 비교
MSA ( Microservices Architecture ) 발표 자료 다운로드
AWS Personalize 중심으로 살펴본 추천 시스템 원리와 구축
Microservices
Amazon RDS Proxy 집중 탐구 - 윤석찬 :: AWS Unboxing 온라인 세미나
AWS Black Belt Online Seminar 2017 AWSへのネットワーク接続とAWS上のネットワーク内部設計
AWS Summit Seoul 2023 |투자를 모두에게, 토스증권의 MTS 구축 사례
[最新バージョンの情報がDescription欄にございます]AWS Black Belt Online Seminar 2018 Amazon Connect
세션 3: IT 담당자를 위한 Cloud 로의 전환
모두싸인의 AWS 성장기
Amazon Dynamo DB 활용하기 - 강민석 :: AWS Database Modernization Day 온라인
AWS DirectConnect 구성 가이드 (김용우) - 파트너 웨비나 시리즈
Ad

Similar to Java (spring) vs javascript (node.js) (20)

PDF
Javascript everywhere - Node.js | Devon 2012
PDF
Front end dev 2016 & beyond
PPTX
Single-page Application
PDF
오픈소스 성능 최적화 보고서 ch07. Infinispan
PDF
[오픈소스컨설팅]Spring 3.1 Core
PDF
서버학개론(백엔드 서버 개발자를 위한)
PDF
Node.js 시작하기
PPTX
Angular2 톺아보기
PPTX
댓글 플러그인 아포가토
PPTX
서버 아키텍처 이해를 위한 프로세스와 쓰레드
PDF
Java the good parts
PPT
PPTX
소프트웨어 개발자 로드맵
PPTX
Node.js의 도입과 활용
PDF
[Uws] enterprise application architecture, msa, java9, spring 소개
PPTX
practical perf testing - d2startup
PPTX
모바일 크로스플랫폼 비교 - 월간슬라이드 4월
PDF
Nodejs발표자료 - 팀 세미나용
PPTX
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
PPTX
처음 시작하는 라라벨
Javascript everywhere - Node.js | Devon 2012
Front end dev 2016 & beyond
Single-page Application
오픈소스 성능 최적화 보고서 ch07. Infinispan
[오픈소스컨설팅]Spring 3.1 Core
서버학개론(백엔드 서버 개발자를 위한)
Node.js 시작하기
Angular2 톺아보기
댓글 플러그인 아포가토
서버 아키텍처 이해를 위한 프로세스와 쓰레드
Java the good parts
소프트웨어 개발자 로드맵
Node.js의 도입과 활용
[Uws] enterprise application architecture, msa, java9, spring 소개
practical perf testing - d2startup
모바일 크로스플랫폼 비교 - 월간슬라이드 4월
Nodejs발표자료 - 팀 세미나용
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
처음 시작하는 라라벨
Ad

Java (spring) vs javascript (node.js)

  • 1. JAVA (Spring) vs Javascript (Node.js) 1. 언어별 구조 및 특징 – Node.js 2. 언어별 구조 및 특징 – JAVA 3. 성능 벤치마크 4. 결론
  • 2. 1. 언어별 구조 및 특징 Node.js
  • 3. 구조 및 특징 1. 싱글 쓰레드, 이벤트 루프 2. 동적 타입언어 3. LIBUV 이용, I/O 작업에 특화 (Network I/O, Database I/O, File I/O, etc...) 4. NPM의 수많은 모듈 (But. 검증되지 않은 모듈 또한 많음) 5. 한 언어만으로 Client(Web) - Server 프로그래밍 가능 (React Native 를 이용 모바일도 개발 가능) Node.js
  • 4. 구조 1. 싱글 쓰레드, 이벤트 루프 Node.js 클라이언트의 요청이 들어오면 Event Queue로 들어온 요청은 Event Loop 에서 처리 Blocking I/O 가 일어나게 되면 Worker Thread (Internal Thread) 에 의해 별도 처리 완료된 작업은 Event Loop 에 의해 응답
  • 5. 구조 1. 싱글 쓰레드, 이벤트 루프 Node.js 요청을 싱글 쓰레드에서 처리하므로 요청의 로직이 오래 걸리는 경우 뒤 따르는 요청을 처리하지 못한다.
  • 6. 특징 2. 동적 타입언어 Node.js Interpreter 언어 (JIT 에 의해 컴파일 될 수 있음) 타입이 실행 중 결정 (실행 중 타입 오류가 발생하여 타입체크 필요) 보완하기 위한 TypeScript 등이 존재 … 그만큼 자유롭게 쓸 수 있다(?)
  • 7. 특징 3. LIBUV 이용, I/O 작업에 특화 Node.js
  • 8. 특징 4. NPM(or Yarn) 의 수많은 모듈 (But. 검증되지 않은 모듈 또한 많음) Node.js NPM 에서는 매주 120억 건의 다운로드가 발생 (2019년 10월 기준) 관리가 되고 사용자가 많은 모듈은 안정성이 확보되었으나 매우 많은 모듈이 생기고 사라지는 만큼 일정량의 다운로드 수를 가진 안정적인 모듈을 선택해야 함
  • 9. 특징 5. 한 언어만으로 Client(Web) - Server 프로그래밍 가능 Node.js 2019년 까지 8가지 이상의 웹 백앤드 프레임워크 대표적으로 Express, Next.js, Koa 등…
  • 10. 특징 5. 한 언어만으로 Client(Web) - Server 프로그래밍 가능 Node.js 모바일, 데스크탑과 프론트앤드 개발이 가능한 프레임워크들 대표적으로 React Native(Android, iOS), Electron(Windows, MacOS), React, Vue.js 등…
  • 11. 활용 작은 기업에서는 빠르게 개발하기 위해 많이 사용 (생산성 ↑) 대기업 중에서는 주로 특정 부분만 Node.js 를 사용함 (ex. Netflix – https://www.youtube.com/watch?v=B90OabhYJpA&t=12m11s) Node.js
  • 12. 2. 언어별 구조 및 특징 JAVA
  • 13. 구조 및 특징 1. 멀티 쓰레드 프로그래밍 2. 정적 타입언어 (컴파일 언어) 3. 객체지향 설계가 잘되어 Business Logic 에 특화 4. Java NIO 를 이용 I/O 성능을 올릴 수 있음 (ex. Netty) 5. 검증된 Spring Framework 가 있음 6. 많은 인력 Pool 7. 한 언어만으로 Mobile - Server 프로그래밍 가능 JAVA
  • 14. 구조 1. 멀티 쓰레드 프로그래밍 JAVA 클라이언트의 요청이 들어오면 쓰레드 할당 개별 쓰레드에서 요청 처리 Blocking I/O 가 일어나게 되면 쓰레드는 대기 상태로 빠짐 응답 후 쓰레드 풀에 쓰레드 반환
  • 15. 구조 1. 멀티 쓰레드 프로그래밍 JAVA 동시에 대량으로 발생하는 클라이언트의 요청을 처리하는 것이 어렵다. (쓰레드 개수의 한계) 요청마다 쓰레드를 이용하기 때문에 각 요청에 따른 메모리를 사용하게 된다. 클라이언트의 요청은 사용 가능한 쓰레드가 있을 때 까지 기다려야 한다. Blocking I/O 작업으로 시간이 낭비된다.
  • 16. 특징 2. 정적 타입언어 (컴파일 언어) JAVA 대부분의 인기 있는 언어 중 상당 수는 컴파일 언어 그 중 2위(약 5년간 1위 였음) 컴파일 시에 타입이 결정 (오타로 인한 문제 발생률 낮음) Primitive Type 에 대해서는 Type Safe 하지만 Reference Type 에 대해서는 완전히 Type Safe 하지는 않음
  • 17. 특징 3. 객체지향 설계가 잘되어 Business Logic 에 특화 JAVA 대표적인 객체지향 프로그래밍 언어 장점 : 재사용성, 생산성, 유지보수의 용이성 단점 : 실행 속도, 처음 개발 시 설계까지 오래 걸림 비즈니스 로직? 하나의 프로젝트나 어플리케이션은 로직(Logic)이라고 불리는 수많은 논리적 흐름으로 이루어 집니다. 데이터를 읽어오거나 저장하고, 이 데이터를 가공하여 사용자에게 의미있는 정보를 보 여주거나 네트워크를 통해 요청을 보내고 받는 행위들은 모두 로직이 모여서 이루어낸 결과물 입니다. 이들 중에서 어플리케이션이 제공하고자 하는 서비스나 업무를 직접적으로 구현하는 로직을 비즈니스 로직(Business Logic)이라고 부릅니다.
  • 18. 특징 4. Java NIO 를 이용 I/O 성능을 올릴 수 있음 (ex. Netty) JAVA 비동기 Non-blocking 개발을 할 수 있음 Netty 는 Node.js 의 이벤트 루프와 비슷한 구조로 동작 구글 gRPC 에서도 내부적으로 Netty 를 사용
  • 19. 특징 5. 검증된 Spring Framework 가 있음 JAVA JAVA 엔터프라이즈 개발을 위한 오픈소스(Open Source) 어플리 케이션 프레임워크 전자정부 표준프레임워크의 기반 Spring Security, JDBC, JPA, Cloud, AMQP 등 상용 서비스를 위한 기본 라이브러리들이 개발되어 있음
  • 20. 특징 6. 많은 인력 Pool JAVA 잡코리아와 사람인에서 웹 개발자를 검색하면 대부분 JAVA 개발자 그만큼 경력자와 신입을 뽑기 수월함 잡코리아 사람인
  • 21. 특징 7. 한 언어만으로 Mobile - Server 프로그래밍 가능 JAVA JAVA 를 이용 Spring (Server) – Android (Client) 개발이 가능 사실상 JVM 이 올라갈 수 있는 어느 곳이든 사용 가능함
  • 22. 활용 대부분 대기업에서 주 서비스 개발 언어로 JAVA 를 선택 JAVA
  • 24. 성능 비교 Node.js (14.4.0) JAVA (14.0.1) Response(s) Memory (KB) CPU (%) Response(s) Memory (KB) CPU (%) Regex-redux 4.27 1,064 4/2/75/47 5.75 647 82/88/77/77 Mandelbrot 4.01 86 98/98/99/98 4.14 71 99/99/98/98 Spectral-norm 1.68 62 89/90/91/90 1.57 39 96/94/95/95 Fannkuch-redux 12.10 57 98/98/99/99 10.61 34 99/99/99/98 N-body 8.35 35 1/100/0/0 6.74 36 100/1/0/0 Reverse-complement 2.19 1,340 48/55/50/50 1.58 677 55/74/48/61 Pidigits 1.32 36 3/2/8/100 0.94 36 98/5/2/9 Fasta 2.04 67 76/85/75/74 1.27 45 82/83/73/70 Binary-trees 5.83 1,204 86/82/84/85 2.48 2,496 78/91/74/75 K-nucleotide 15.06 398 76/60/48/92 4.57 485 77/74/83/82 2 1 4 4 출처 : https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/javascript.html 이 벤치마크에서 JAVA 가 일부의 경우를 제외하고 대부분은 Node.js 보다 조금 빨랐다. 또한 Node.js 는 속도가 빠르더라도 계산하기 위해 2배 가까이 메모리를 사용하는 경우도 보였다. 알고리즘
  • 25. 성능 비교 JAVA Node.js Nodejs 91,799 play2-java-jpa-hikaricp-netty 85,449 nodejs-mysql 50,692 Spring 27,339 express-mysql 44,166 Spring-webflux-jdbc 22,528 출처 : https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=fortune 프레임워크 별 최고 초당 응답률 비교 초당 응답률 1 JAVA Node.js Nodejs 3,680 Spring 9,099 nodejs-mysql 1,573 Spring-webflux-jdbc 9,349 express-mysql 1,413 play2-java-jpa-hikaricp-netty 5,434 출처 : https://www.techempower.com/benchmarks/#section=data-r18&hw=ph&test=update 벤치마크에서 보이듯 최고 속도에 대해서 는 Node.js 가 우세하지만 Netty 를 쓰는 경우 JAVA 보다 느림 데이터 업데이트 속도의 경우 JAVA 와 몇 배 이상 차이가 나기 시작한다 프레임워크 별 데이터 업데이트 속도 비교
  • 26. 성능 비교 출처 : https://www.techempower.com/benchmarks/#section=data-r18&hw=ph&test=update 단순 JSON 응답이나 피보나치 수열 계산에서 Node.js 의 성능이 살짝 우세하다 또한 1 Core (저사양) 에서는 5배 가량 더 빠른 것으로 나타난다. 단순 리스팅의 경우 Node.js 가 3배 가량 빨랐다. 초당 응답률 2
  • 28. 벤치마크는 벤치마크일 뿐이다. 결론 위 벤치마크 조차 서로 다른 결과가 나왔기 때문에 실제 적용 된 어플리케이션의 성능은 또 다를 수 있다. Node.js 는 마이크로 서비스와 궁합이 좋음 JAVA 는 대규모 서비스 개발에 좋음 I/O 및 커널 사용이 잦은 어플리케이션의 경우 Node.js 를 이용 비즈니스 로직 등이 복잡한 환경에서는 그에 적합한 언어를 사용 (그러나 결국 언어보단 개발자의 역량이 제일 중요하다…) 언어 선택은? 언어별 장단점이 있음
  • 30. Web Framework Benchmarks - https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=fortune Node js versus Java fastest programs - https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/javascript.html [Node.js] 자바와 Node.js 의 성능 & 속도 비교 - https://crazia.tistory.com/entry/Nodejs-자바와-Nodejs-의-성능-속도-비교 Node.js at PayPal - https://medium.com/paypal-engineering/node-js-at-paypal-4e2d1d08ce4f php, nodejs 속도 벤치마크 - https://blog.codens.info/1868 Web REST API Benchmark on a Real Life Application - https://medium.com/@mihaigeorge.c/web-rest-api-benchmark-on-a-real-life-application-ebb743a5d7a3 빠르게 서비스를 개발할 수 있는 Node.js - https://d2.naver.com/helloworld/4994500 JAVA 개발자가 시작하는 NodeJS - https://www.slideshare.net/lahuman1/java-nodejs-196972795 정적타입vs동적타입?? 단순한 언어가 최고!! - https://hamait.tistory.com/845?category=128262 왜 자바 Spring만 뽑나요? 꼭 배워야 하나요? - https://seolin.tistory.com/119 Node.js와 Java와의 서로다른 차이 - https://lts0606.tistory.com/91 Node.js vs Java 구조적 차이 :: 마이구미 - https://mygumi.tistory.com/154 Node JS Architecture – Single Threaded Event Loop - https://www.journaldev.com/7462/node-js-architecture-single-threaded-event-loop 나라별 구인 통계 - http://tech.trenbe.com/?p=515 NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기 - https://www.slideshare.net/JohnKim0331/ms-meltingpot-seminar Node.js의 사용 - 기업에서 노드를 사용하는 방법 - https://code-daniel.tistory.com/65 넷플릭스 Node.js 활용 사례1 - https://www.youtube.com/watch?v=B90OabhYJpA&t=12m11s 넷플릭스 Node.js 활용 사례2 - https://www.youtube.com/watch?v=p74282nDMX8&feature=youtu.be&t=14m25s 자바스크립트 프레임워크 통계 - https://2019.stateofjs.com/ko/ 티오베 통계 - https://www.tiobe.com/tiobe-index/ [Spring] 스프링(Spring) 정의 및 특징 정리 - https://goddaehee.tistory.com/156 Netty 시작하기 - http://hatemogi.github.io/netty-startup Zuul's Journey to Non-Blocking - https://www.slideshare.net/artgon/zuuls-journey-to-nonblocking 견고한 node.js 프로젝트 설계하기 - https://velog.io/@hopsprings2/견고한-node.js-프로젝트-아키텍쳐-설계하기
  • 31. 인프런 JAVA 개발자 로드맵 - https://www.inflearn.com/roadmaps/12 위키백과 : 비즈니스 로직 - https://ko.wikipedia.org/wiki/비즈니스_로직 2019년과 이후 JavaScript의 동향 – 브라우저 밖의 JavaScript 1 - https://d2.naver.com/helloworld/7700312 npm's Laurie Voss: JavaScript - Who, What, Where, Why and Next | JSConf.Asia 2019 - https://www.youtube.com/watch?v=H8IaDYrv- 3E&feature=youtu.be&t=1165 Spring Tutorial – A Java Framework Providing Efficiency - https://www.edureka.co/blog/spring-tutorial/