Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Java (spring) vs javascript (node.js)

123 visualizaciones

Publicado el

Java (spring) vs javascript (node.js)
자바와 노드의 구조 및 특징 비교

Publicado en: Software
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Java (spring) vs javascript (node.js)

  1. 1. JAVA (Spring) vs Javascript (Node.js) 1. 언어별 구조 및 특징 – Node.js 2. 언어별 구조 및 특징 – JAVA 3. 성능 벤치마크 4. 결론
  2. 2. 1. 언어별 구조 및 특징 Node.js
  3. 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. 4. 구조 1. 싱글 쓰레드, 이벤트 루프 Node.js 클라이언트의 요청이 들어오면 Event Queue로 들어온 요청은 Event Loop 에서 처리 Blocking I/O 가 일어나게 되면 Worker Thread (Internal Thread) 에 의해 별도 처리 완료된 작업은 Event Loop 에 의해 응답
  5. 5. 구조 1. 싱글 쓰레드, 이벤트 루프 Node.js 요청을 싱글 쓰레드에서 처리하므로 요청의 로직이 오래 걸리는 경우 뒤 따르는 요청을 처리하지 못한다.
  6. 6. 특징 2. 동적 타입언어 Node.js Interpreter 언어 (JIT 에 의해 컴파일 될 수 있음) 타입이 실행 중 결정 (실행 중 타입 오류가 발생하여 타입체크 필요) 보완하기 위한 TypeScript 등이 존재 … 그만큼 자유롭게 쓸 수 있다(?)
  7. 7. 특징 3. LIBUV 이용, I/O 작업에 특화 Node.js
  8. 8. 특징 4. NPM(or Yarn) 의 수많은 모듈 (But. 검증되지 않은 모듈 또한 많음) Node.js NPM 에서는 매주 120억 건의 다운로드가 발생 (2019년 10월 기준) 관리가 되고 사용자가 많은 모듈은 안정성이 확보되었으나 매우 많은 모듈이 생기고 사라지는 만큼 일정량의 다운로드 수를 가진 안정적인 모듈을 선택해야 함
  9. 9. 특징 5. 한 언어만으로 Client(Web) - Server 프로그래밍 가능 Node.js 2019년 까지 8가지 이상의 웹 백앤드 프레임워크 대표적으로 Express, Next.js, Koa 등…
  10. 10. 특징 5. 한 언어만으로 Client(Web) - Server 프로그래밍 가능 Node.js 모바일, 데스크탑과 프론트앤드 개발이 가능한 프레임워크들 대표적으로 React Native(Android, iOS), Electron(Windows, MacOS), React, Vue.js 등…
  11. 11. 활용 작은 기업에서는 빠르게 개발하기 위해 많이 사용 (생산성 ↑) 대기업 중에서는 주로 특정 부분만 Node.js 를 사용함 (ex. Netflix – https://www.youtube.com/watch?v=B90OabhYJpA&t=12m11s) Node.js
  12. 12. 2. 언어별 구조 및 특징 JAVA
  13. 13. 구조 및 특징 1. 멀티 쓰레드 프로그래밍 2. 정적 타입언어 (컴파일 언어) 3. 객체지향 설계가 잘되어 Business Logic 에 특화 4. Java NIO 를 이용 I/O 성능을 올릴 수 있음 (ex. Netty) 5. 검증된 Spring Framework 가 있음 6. 많은 인력 Pool 7. 한 언어만으로 Mobile - Server 프로그래밍 가능 JAVA
  14. 14. 구조 1. 멀티 쓰레드 프로그래밍 JAVA 클라이언트의 요청이 들어오면 쓰레드 할당 개별 쓰레드에서 요청 처리 Blocking I/O 가 일어나게 되면 쓰레드는 대기 상태로 빠짐 응답 후 쓰레드 풀에 쓰레드 반환
  15. 15. 구조 1. 멀티 쓰레드 프로그래밍 JAVA 동시에 대량으로 발생하는 클라이언트의 요청을 처리하는 것이 어렵다. (쓰레드 개수의 한계) 요청마다 쓰레드를 이용하기 때문에 각 요청에 따른 메모리를 사용하게 된다. 클라이언트의 요청은 사용 가능한 쓰레드가 있을 때 까지 기다려야 한다. Blocking I/O 작업으로 시간이 낭비된다.
  16. 16. 특징 2. 정적 타입언어 (컴파일 언어) JAVA 대부분의 인기 있는 언어 중 상당 수는 컴파일 언어 그 중 2위(약 5년간 1위 였음) 컴파일 시에 타입이 결정 (오타로 인한 문제 발생률 낮음) Primitive Type 에 대해서는 Type Safe 하지만 Reference Type 에 대해서는 완전히 Type Safe 하지는 않음
  17. 17. 특징 3. 객체지향 설계가 잘되어 Business Logic 에 특화 JAVA 대표적인 객체지향 프로그래밍 언어 장점 : 재사용성, 생산성, 유지보수의 용이성 단점 : 실행 속도, 처음 개발 시 설계까지 오래 걸림 비즈니스 로직? 하나의 프로젝트나 어플리케이션은 로직(Logic)이라고 불리는 수많은 논리적 흐름으로 이루어 집니다. 데이터를 읽어오거나 저장하고, 이 데이터를 가공하여 사용자에게 의미있는 정보를 보 여주거나 네트워크를 통해 요청을 보내고 받는 행위들은 모두 로직이 모여서 이루어낸 결과물 입니다. 이들 중에서 어플리케이션이 제공하고자 하는 서비스나 업무를 직접적으로 구현하는 로직을 비즈니스 로직(Business Logic)이라고 부릅니다.
  18. 18. 특징 4. Java NIO 를 이용 I/O 성능을 올릴 수 있음 (ex. Netty) JAVA 비동기 Non-blocking 개발을 할 수 있음 Netty 는 Node.js 의 이벤트 루프와 비슷한 구조로 동작 구글 gRPC 에서도 내부적으로 Netty 를 사용
  19. 19. 특징 5. 검증된 Spring Framework 가 있음 JAVA JAVA 엔터프라이즈 개발을 위한 오픈소스(Open Source) 어플리 케이션 프레임워크 전자정부 표준프레임워크의 기반 Spring Security, JDBC, JPA, Cloud, AMQP 등 상용 서비스를 위한 기본 라이브러리들이 개발되어 있음
  20. 20. 특징 6. 많은 인력 Pool JAVA 잡코리아와 사람인에서 웹 개발자를 검색하면 대부분 JAVA 개발자 그만큼 경력자와 신입을 뽑기 수월함 잡코리아 사람인
  21. 21. 특징 7. 한 언어만으로 Mobile - Server 프로그래밍 가능 JAVA JAVA 를 이용 Spring (Server) – Android (Client) 개발이 가능 사실상 JVM 이 올라갈 수 있는 어느 곳이든 사용 가능함
  22. 22. 활용 대부분 대기업에서 주 서비스 개발 언어로 JAVA 를 선택 JAVA
  23. 23. 3. 성능 벤치마크
  24. 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. 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. 26. 성능 비교 출처 : https://www.techempower.com/benchmarks/#section=data-r18&hw=ph&test=update 단순 JSON 응답이나 피보나치 수열 계산에서 Node.js 의 성능이 살짝 우세하다 또한 1 Core (저사양) 에서는 5배 가량 더 빠른 것으로 나타난다. 단순 리스팅의 경우 Node.js 가 3배 가량 빨랐다. 초당 응답률 2
  27. 27. 4. 결론
  28. 28. 벤치마크는 벤치마크일 뿐이다. 결론 위 벤치마크 조차 서로 다른 결과가 나왔기 때문에 실제 적용 된 어플리케이션의 성능은 또 다를 수 있다. Node.js 는 마이크로 서비스와 궁합이 좋음 JAVA 는 대규모 서비스 개발에 좋음 I/O 및 커널 사용이 잦은 어플리케이션의 경우 Node.js 를 이용 비즈니스 로직 등이 복잡한 환경에서는 그에 적합한 언어를 사용 (그러나 결국 언어보단 개발자의 역량이 제일 중요하다…) 언어 선택은? 언어별 장단점이 있음
  29. 29. . Reference
  30. 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. 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/

×