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/
Ad

Recommended

성능 최대화를 위한 CloudFront 설정 Best Practice
성능 최대화를 위한 CloudFront 설정 Best Practice
GS Neotek
 
DMS와 SCT를 활용한 Oracle에서 Open Source DB로의 전환
DMS와 SCT를 활용한 Oracle에서 Open Source DB로의 전환
Amazon Web Services Korea
 
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
Amazon Web Services Korea
 
Route53 및 CloudFront를 이용한 CDN 활용기 - AWS Summit Seoul 2017
Route53 및 CloudFront를 이용한 CDN 활용기 - AWS Summit Seoul 2017
Amazon Web Services Korea
 
민첩하고 비용효율적인 Data Lake 구축 - 문종민 솔루션즈 아키텍트, AWS
민첩하고 비용효율적인 Data Lake 구축 - 문종민 솔루션즈 아키텍트, AWS
Amazon Web Services Korea
 
고급 클라우드 아키텍처 방법론- 양승도 솔루션즈 아키텍트:: AWS Cloud Track 2 Advanced
고급 클라우드 아키텍처 방법론- 양승도 솔루션즈 아키텍트:: AWS Cloud Track 2 Advanced
Amazon Web Services Korea
 
AWS 클라우드 비용 최적화를 위한 TIP - 임성은 AWS 매니저
AWS 클라우드 비용 최적화를 위한 TIP - 임성은 AWS 매니저
Amazon Web Services Korea
 
API Strategy Presentation
API Strategy Presentation
Lawrence Coburn
 
B4USolution_API-Testing
B4USolution_API-Testing
b4usolution .
 
Api testing
Api testing
HamzaMajid13
 
다양한 배포 기법과 AWS에서 구축하는 CI/CD 파이프라인 l 안효빈 솔루션즈 아키텍트
다양한 배포 기법과 AWS에서 구축하는 CI/CD 파이프라인 l 안효빈 솔루션즈 아키텍트
Amazon Web Services Korea
 
Effective API Gateway
Effective API Gateway
Hari Wiz
 
[AWS Builders 온라인 시리즈] AWS 서비스를 활용하여 파일 스토리지 빠르게 마이그레이션 하기 - 서지혜, AWS 솔루션즈 아키텍트
[AWS Builders 온라인 시리즈] AWS 서비스를 활용하여 파일 스토리지 빠르게 마이그레이션 하기 - 서지혜, AWS 솔루션즈 아키텍트
Amazon Web Services Korea
 
Api testing
Api testing
Keshav Kashyap
 
API Testing Using REST Assured with TestNG
API Testing Using REST Assured with TestNG
Siddharth Sharma
 
Event-Driven Microservices With NATS Streaming
Event-Driven Microservices With NATS Streaming
Shiju Varghese
 
AWS 기반 클라우드 아키텍처 모범사례 - 삼성전자 개발자 포털/개발자 워크스페이스 - 정영준 솔루션즈 아키텍트, AWS / 유현성 수석,...
AWS 기반 클라우드 아키텍처 모범사례 - 삼성전자 개발자 포털/개발자 워크스페이스 - 정영준 솔루션즈 아키텍트, AWS / 유현성 수석,...
Amazon Web Services Korea
 
Mapping out your API Strategy - 4.20.11 Webinar slides
Mapping out your API Strategy - 4.20.11 Webinar slides
Apigee | Google Cloud
 
Selenium web driver
Selenium web driver
Roman Savitskiy
 
Soap ui
Soap ui
EPAM_Dnipropetrovsk_Testing_Community
 
AWS 클라우드 핵심 서비스로 클라우드 기반 아키텍처 빠르게 구성하기 - 문종민 솔루션즈 아키텍트, AWS :: AWS Summit Seo...
AWS 클라우드 핵심 서비스로 클라우드 기반 아키텍처 빠르게 구성하기 - 문종민 솔루션즈 아키텍트, AWS :: AWS Summit Seo...
Amazon Web Services Korea
 
AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017
AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017
AWSKRUG - AWS한국사용자모임
 
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
SangIn Choung
 
컨테이너와 서버리스 기술을 통한 디지털 트랜스포메이션::정도현::AWS Summit Seoul 2018
컨테이너와 서버리스 기술을 통한 디지털 트랜스포메이션::정도현::AWS Summit Seoul 2018
Amazon Web Services Korea
 
AWS로 게임의 공통 기능 개발하기! - 채민관, 김민석, 한준식 :: AWS Game Master 온라인 세미나 #2
AWS로 게임의 공통 기능 개발하기! - 채민관, 김민석, 한준식 :: AWS Game Master 온라인 세미나 #2
Amazon Web Services Korea
 
Serverless Architecture on AWS
Serverless Architecture on AWS
Rajind Ruparathna
 
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
Amazon Web Services Korea
 
REST API Design & Development
REST API Design & Development
Ashok Pundit
 
Single-page Application
Single-page Application
Sangmin Yoon
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012
Daum DNA
 

More Related Content

What's hot (20)

B4USolution_API-Testing
B4USolution_API-Testing
b4usolution .
 
Api testing
Api testing
HamzaMajid13
 
다양한 배포 기법과 AWS에서 구축하는 CI/CD 파이프라인 l 안효빈 솔루션즈 아키텍트
다양한 배포 기법과 AWS에서 구축하는 CI/CD 파이프라인 l 안효빈 솔루션즈 아키텍트
Amazon Web Services Korea
 
Effective API Gateway
Effective API Gateway
Hari Wiz
 
[AWS Builders 온라인 시리즈] AWS 서비스를 활용하여 파일 스토리지 빠르게 마이그레이션 하기 - 서지혜, AWS 솔루션즈 아키텍트
[AWS Builders 온라인 시리즈] AWS 서비스를 활용하여 파일 스토리지 빠르게 마이그레이션 하기 - 서지혜, AWS 솔루션즈 아키텍트
Amazon Web Services Korea
 
Api testing
Api testing
Keshav Kashyap
 
API Testing Using REST Assured with TestNG
API Testing Using REST Assured with TestNG
Siddharth Sharma
 
Event-Driven Microservices With NATS Streaming
Event-Driven Microservices With NATS Streaming
Shiju Varghese
 
AWS 기반 클라우드 아키텍처 모범사례 - 삼성전자 개발자 포털/개발자 워크스페이스 - 정영준 솔루션즈 아키텍트, AWS / 유현성 수석,...
AWS 기반 클라우드 아키텍처 모범사례 - 삼성전자 개발자 포털/개발자 워크스페이스 - 정영준 솔루션즈 아키텍트, AWS / 유현성 수석,...
Amazon Web Services Korea
 
Mapping out your API Strategy - 4.20.11 Webinar slides
Mapping out your API Strategy - 4.20.11 Webinar slides
Apigee | Google Cloud
 
Selenium web driver
Selenium web driver
Roman Savitskiy
 
Soap ui
Soap ui
EPAM_Dnipropetrovsk_Testing_Community
 
AWS 클라우드 핵심 서비스로 클라우드 기반 아키텍처 빠르게 구성하기 - 문종민 솔루션즈 아키텍트, AWS :: AWS Summit Seo...
AWS 클라우드 핵심 서비스로 클라우드 기반 아키텍처 빠르게 구성하기 - 문종민 솔루션즈 아키텍트, AWS :: AWS Summit Seo...
Amazon Web Services Korea
 
AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017
AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017
AWSKRUG - AWS한국사용자모임
 
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
SangIn Choung
 
컨테이너와 서버리스 기술을 통한 디지털 트랜스포메이션::정도현::AWS Summit Seoul 2018
컨테이너와 서버리스 기술을 통한 디지털 트랜스포메이션::정도현::AWS Summit Seoul 2018
Amazon Web Services Korea
 
AWS로 게임의 공통 기능 개발하기! - 채민관, 김민석, 한준식 :: AWS Game Master 온라인 세미나 #2
AWS로 게임의 공통 기능 개발하기! - 채민관, 김민석, 한준식 :: AWS Game Master 온라인 세미나 #2
Amazon Web Services Korea
 
Serverless Architecture on AWS
Serverless Architecture on AWS
Rajind Ruparathna
 
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
Amazon Web Services Korea
 
REST API Design & Development
REST API Design & Development
Ashok Pundit
 
B4USolution_API-Testing
B4USolution_API-Testing
b4usolution .
 
다양한 배포 기법과 AWS에서 구축하는 CI/CD 파이프라인 l 안효빈 솔루션즈 아키텍트
다양한 배포 기법과 AWS에서 구축하는 CI/CD 파이프라인 l 안효빈 솔루션즈 아키텍트
Amazon Web Services Korea
 
Effective API Gateway
Effective API Gateway
Hari Wiz
 
[AWS Builders 온라인 시리즈] AWS 서비스를 활용하여 파일 스토리지 빠르게 마이그레이션 하기 - 서지혜, AWS 솔루션즈 아키텍트
[AWS Builders 온라인 시리즈] AWS 서비스를 활용하여 파일 스토리지 빠르게 마이그레이션 하기 - 서지혜, AWS 솔루션즈 아키텍트
Amazon Web Services Korea
 
API Testing Using REST Assured with TestNG
API Testing Using REST Assured with TestNG
Siddharth Sharma
 
Event-Driven Microservices With NATS Streaming
Event-Driven Microservices With NATS Streaming
Shiju Varghese
 
AWS 기반 클라우드 아키텍처 모범사례 - 삼성전자 개발자 포털/개발자 워크스페이스 - 정영준 솔루션즈 아키텍트, AWS / 유현성 수석,...
AWS 기반 클라우드 아키텍처 모범사례 - 삼성전자 개발자 포털/개발자 워크스페이스 - 정영준 솔루션즈 아키텍트, AWS / 유현성 수석,...
Amazon Web Services Korea
 
Mapping out your API Strategy - 4.20.11 Webinar slides
Mapping out your API Strategy - 4.20.11 Webinar slides
Apigee | Google Cloud
 
AWS 클라우드 핵심 서비스로 클라우드 기반 아키텍처 빠르게 구성하기 - 문종민 솔루션즈 아키텍트, AWS :: AWS Summit Seo...
AWS 클라우드 핵심 서비스로 클라우드 기반 아키텍처 빠르게 구성하기 - 문종민 솔루션즈 아키텍트, AWS :: AWS Summit Seo...
Amazon Web Services Korea
 
AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017
AWS 기반 대규모 트래픽 견디기 - 장준엽 (구로디지털 모임) :: AWS Community Day 2017
AWSKRUG - AWS한국사용자모임
 
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
SangIn Choung
 
컨테이너와 서버리스 기술을 통한 디지털 트랜스포메이션::정도현::AWS Summit Seoul 2018
컨테이너와 서버리스 기술을 통한 디지털 트랜스포메이션::정도현::AWS Summit Seoul 2018
Amazon Web Services Korea
 
AWS로 게임의 공통 기능 개발하기! - 채민관, 김민석, 한준식 :: AWS Game Master 온라인 세미나 #2
AWS로 게임의 공통 기능 개발하기! - 채민관, 김민석, 한준식 :: AWS Game Master 온라인 세미나 #2
Amazon Web Services Korea
 
Serverless Architecture on AWS
Serverless Architecture on AWS
Rajind Ruparathna
 
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
Amazon Web Services Korea
 
REST API Design & Development
REST API Design & Development
Ashok Pundit
 

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

Single-page Application
Single-page Application
Sangmin Yoon
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012
Daum DNA
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x
Terry Cho
 
Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.
SeungWoo Lee
 
Node.js 시작하기
Node.js 시작하기
Huey Park
 
Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용
SuHyun Jeon
 
Java 그쪽 동네는
Java 그쪽 동네는
도형 임
 
Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구
ByungJoon Lee
 
Node js[stg]onimusha 20140725
Node js[stg]onimusha 20140725
병헌 정
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
Jeongsang Baek
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
JinKwon Lee
 
격변하는 프로그래밍 언어, 이제는 Let it go
격변하는 프로그래밍 언어, 이제는 Let it go
Chris Ohk
 
자바스크립트의 변천사
자바스크립트의 변천사
Hun Yong Song
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
Jeongsang Baek
 
Node.js의 도입과 활용
Node.js의 도입과 활용
Jin wook
 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs
기동 이
 
(알도개) GraalVM – 자바를 넘어선 새로운 시작의 서막
(알도개) GraalVM – 자바를 넘어선 새로운 시작의 서막
Jay Park
 
프론트엔드 개발자
프론트엔드 개발자
jung kyunghwan
 
java_1장.pptx
java_1장.pptx
ssuserdfc8b1
 
Single-page Application
Single-page Application
Sangmin Yoon
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012
Daum DNA
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x
Terry Cho
 
Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.
SeungWoo Lee
 
Node.js 시작하기
Node.js 시작하기
Huey Park
 
Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용
SuHyun Jeon
 
Java 그쪽 동네는
Java 그쪽 동네는
도형 임
 
Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구
ByungJoon Lee
 
Node js[stg]onimusha 20140725
Node js[stg]onimusha 20140725
병헌 정
 
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
Jeongsang Baek
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
JinKwon Lee
 
격변하는 프로그래밍 언어, 이제는 Let it go
격변하는 프로그래밍 언어, 이제는 Let it go
Chris Ohk
 
자바스크립트의 변천사
자바스크립트의 변천사
Hun Yong Song
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
Jeongsang Baek
 
Node.js의 도입과 활용
Node.js의 도입과 활용
Jin wook
 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs
기동 이
 
(알도개) GraalVM – 자바를 넘어선 새로운 시작의 서막
(알도개) GraalVM – 자바를 넘어선 새로운 시작의 서막
Jay Park
 
프론트엔드 개발자
프론트엔드 개발자
jung kyunghwan
 
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/