Java웹 프로그래밍

프로그래밍 개론 2

아리빠 2023. 5. 23. 12:40

● Vue.js와 Node.js 차이 

Vue.js:
Vue.js는 클라이언트 측 웹 애플리케이션 개발을 위한 프론트엔드 JavaScript 프레임워크
Vue.js는 사용자 인터페이스(UI)를 구축하기 위해 사용, 웹 애플리케이션의 뷰 레이어를 관리하는 데 중점
Vue.js는 단일 페이지 애플리케이션(SPA) 및 반응형 웹 애플리케이션 개발에 적합, 컴포넌트 기반 아키텍처를 갖추고 있어 재사용성이 뛰어남
Vue.js는 가볍고 직관적인 문법을 갖고 있으며, 다른 JavaScript 라이브러리나 프레임워크와 함께 사용 가능

 

Node.js:

Node.js는 서버 측 JavaScript 런타임 환경입
Node.js는 비동기 이벤트 기반 프로그래밍 모델을 사용하여 확장 가능하고 고성능인 네트워크 애플리케이션을 개발할 수 있도록 도움
Node.js는 주로 서버 사이드 애플리케이션 개발에 사용, 파일 시스템 액세스, 네트워크 통신, 데이터베이스 액세스 등 다양한 작업을 수행
Node.js는 단일 스레드 이벤트 루프 기반으로 동작, Non-blocking I/O 모델을 사용하여 여러 요청을 동시에 처리할 수 있다.

 

=>

Vue.js는 프론트엔드 웹 개발을 위한 프레임워크로, 사용자 인터페이스(UI)를 구축하는 데 중점.

Node.js는 서버 측 JavaScript 런타임 환경으로, 비동기 이벤트 기반 프로그래밍 모델을 사용하여 확장 가능하고 고성능인 서버 애플리케이션을 개발하는 데 사용

● JIT (Just-In-Time) 

JIT 컴파일의 장점:

- 동적 최적화: JIT 컴파일은 프로그램을 실행하는 시점에 동적으로 코드를 컴파일하고 최적화할 수 있다. 실행 중에 프로그램의 실행 특성이나 상황에 따라 최적화된 코드를 생성할 수 있으며, 이로 인해 실행 속도가 향상될 수 있다.

 

- 빠른 시작 속도: JIT 컴파일은 초기 실행 시간을 줄일 수 있다. 인터프리터에 비해 미리 컴파일된 코드를 실행하기 때문에 시작 속도가 빠르며, 컴파일 단계에서 필요한 코드만 컴파일할 수 있어서 전체 코드를 컴파일하는 AOT 컴파일보다 빠를 수 있다.

 

- JIT 컴파일은 프로그램을 실행하기 전에 모든 코드를 전체적으로 컴파일하는 대신, 프로그램이 실행되는 시점에서 필요한 부분만 동적으로 컴파일하는 방식

- JIT 컴파일러는 실행 시점에서 실제로 필요한 코드 부분을 선택하여 해당 부분을 컴파일하고, 이후 해당 코드를 실행

- JIT 컴파일은 일반적으로 인터프리터와 컴파일러의 장점을 결합하여 실행 시간을 최적화하는 목적으로 사용, 인터프리터는 코드를 한 줄씩 해석하고 실행하는 방식으로 동작하며, 컴파일러는 전체 코드를 한 번에 기계어로 번역하는 방식으로 동작한다.

 

- JIT 컴파일러는 프로그램의 실행 중에 인터프리터 방식으로 동작하다가, 반복적으로 실행되는 코드 부분을 컴파일하여 기계어로 번역.이후부터는 해당 코드 부분은 컴파일된 기계어로 실행되므로 인터프리터에 비해 빠른 속도를 보여준다

-실행 속도 향상: JIT 컴파일러는 코드를 컴파일하여 기계어로 변환하므로, 인터프리터보다 더 빠른 실행 속도를 제공할 수 있다.

-동적 최적화: JIT 컴파일러는 실행 중인 프로그램의 동작을 분석하고 최적화할 수 있다. 반복 실행되는 코드 부분이나 빈번하게 사용되는 변수 등을 식별하여 최적화하여 실행 성능을 향상시킬 수 있다.

-플랫폼 독립성: JIT 컴파일러는 실행 시점에 호스트 시스템의 특성을 고려하여 최적화된 기계어를 생성. 이는 플랫폼 독립성을 유지하면서도 성능을 향상시킬 수 있는 장점을 제공.

 

● AOT (Ahead-of-Time) 

AOT 컴파일의 장점:

 

- 실행 속도: AOT 컴파일은 프로그램을 실행하기 전에 미리 컴파일하는 방식, 실행 시간에 컴파일 과정이 필요하지 않다. 이로 인해 실행 속도가 빠르며, 특히 반복적으로 실행되는 코드에서 성능 향상을 가져온다

 

- 최적화: AOT 컴파일은 전체 코드를 컴파일하는 단계에서 최적화를 수행할 수 있다. 따라서 플랫폼에 특정한 최적화를 적용할 수 있으며, 특정 하드웨어 아키텍처에 대한 최적화도 가능하다.

- 플랫폼 독립성: AOT 컴파일된 코드는 플랫폼에 독립적이므로 여러 플랫폼에서 실행될 수 있다.

 

AOT 컴파일의 단점:

 

- 초기 실행 시간: AOT 컴파일은 프로그램을 실행하기 전에 미리 컴파일하는 과정이 필요하므로 초기 실행 시간이 느릴 수 있다. 컴파일 단계에서 많은 시간이 소요될 수 있으며, 이로 인해 애플리케이션의 시작 속도가 저하될 수 있다.

 

-동적 최적화 제한: AOT 컴파일은 실행 시점에 동적인 상황에 대한 최적화를 제한적으로 수행할 수 있다. 실행 시점에 변화하는 환경이나 상황에 대해 최적화된 코드를 생성하기 어려울 수 있다.


JIT 컴파일의 장점:

동적 최적화: JIT 컴파일은 프로그램을 실행하는 시점에 동적으로 코드를 컴파일하고 최적화할 수 있습니다. 실행 중에 프로그램의 실행 특성이나 상황에 따라 최적화된 코드를 생성할 수 있으며, 이로 인해 실행 속도가 향상될 수 있습니다.
빠른 시작 속도: JIT 컴파일은 초기 실행 시간을 줄일 수 있습니다. 인터프리터에 비해 미리 컴파일된 코드를 실행하기 때문에 시작 속도가 빠르며, 컴파일 단계에서 필요한 코드만 컴파일할 수 있어서 전체 코드를 컴파일하는 AOT 컴파일보다 빠를 수 있습니다.

 

 

AOT 컴파일과 JIT (Just-In-Time) 컴파일은 프로그램을 실행하기 전에 코드를 컴파일하는 시점에 차이가 있다.

- AOT 컴파일은 프로그램을 실행하기 전에 전체 코드를 한 번에 컴파일하는 방식

컴파일된 코드는 실행 시점에 바로 사용되며, 인터프리터나 JIT 컴파일 단계를 거치지 않고 기계어로 직접 실행

이렇게 미리 컴파일된 코드는 특정 플랫폼에 맞게 최적화되어 있으므로 실행 속도가 빠름, 주로 정적 언어나 컴파일 언어에서 사용

- AOT 컴파일의 장점은 미리 최적화된 코드를 실행할 수 있어 실행 속도가 빠르다는 점, 그러나 런타임 환경에 대한 최적화가 제한적이며, 실행 시점에 동적인 상황에 대한 최적화가 어려울 수 있다.

JIT 컴파일의 장점은 실행 시점에서 동적 최적화가 가능하다는 점입니다. 프로그램의 실행 특성에 따라 최적화된 코드를 생성하여 성능을 향상시킬 수 있습니다. 그러나 초기 실행 시간은 JIT 컴파일 단계가 추가되므로 AOT 컴파일에 비해 상대적으로 느릴 수 있다

 

 

● 그럼 aot는 캐싱을 하는가 ?

-AOT (Ahead-of-Time) 컴파일은 프로그램을 실행하기 전에 코드를 미리 컴파일하는 방식이기 때문에 캐싱의 개념과는 조금 다르다.

- AOT 컴파일은 코드를 컴파일하여 기계어로 변환한 후, 이 변환된 코드를 실행할 때마다 재컴파일하지 않고 바로 사용하는 것이 특징

따라서 AOT 컴파일은 컴파일된 코드를 메모리에 캐싱하는 개념으로 볼 수 있다

- 일반적으로 AOT 컴파일은 최적화된 기계어 코드를 생성하고 이를 실행 시점에 반복해서 재컴파일하지 않는다. 그러므로 실행 시점마다 컴파일 과정을 거치지 않고 메모리에 미리 컴파일된 코드가 캐시되어 있으므로 실행 속도가 빠르게 유지된다. 이는 매번 코드를 해석하고 컴파일하는 JIT 컴파일 방식과는 차이점이다.

- 따라서 AOT 컴파일은 실행 전에 미리 컴파일된 코드를 사용하므로 캐싱의 개념과 유사하게 동작하지만, 명시적으로 캐시를 저장하거나 관리하는 것은 아니다.

AOT 컴파일은 프로그램을 빌드할 때 코드를 한 번 컴파일하여 최적화된 형태로 배포하고, 이후에는 그 컴파일된 코드를 실행하는 것

 

● JRE(Java Runtime Environment)와 JDK(Java Development Kit)

 자바 프로그램을 실행하고 개발하기 위해 사용되는 도구와 환경을 나타내는 줄임말

JRE (Java Runtime Environment): JRE는 자바 프로그램을 실행하는 데 필요한 실행 환경을 제공

JRE에는 JVM(Java Virtual Machine), 자바 클래스 라이브러리, 실행 시 필요한 기타 파일들이 포함되어 있다.

JRE는 개발자가 아닌 사용자가 자바 애플리케이션을 실행하는 데 필요한 최소한의 구성 요소를 제공

JDK (Java Development Kit): JDK는 자바 애플리케이션을 개발하기 위한 도구와 환경을 제공

JDK에는 JRE와 함께 개발에 필요한 도구들이 포함

이러한 도구에는 자바 컴파일러(javac), 디버깅 도구, 문서 생성 도구, 프로파일링 도구, 개발에 필요한 라이브러리 등이 포함. JDK는 개발자가 자바 애플리케이션을 작성, 컴파일, 디버깅, 실행 등을 할 수 있도록 지원

 =>JRE는 자바 애플리케이션을 실행하는 데 필요한 최소한의 환경을 제공, JDK는 자바 애플리케이션을 개발하기 위한 도구와 환경을 제공

JDK는 JRE를 포함하고 있으므로, 자바 개발을 위해서는 JDK를 설치해야 한다.

● Java EE(Java Enterprise Edition)

자바 기반의 엔터프라이즈 애플리케이션 개발을 위한 플랫폼과 사양의 모음

Java EE는 기업 환경에서 규모가 크고 복잡한 애플리케이션을 개발하는 데 필요한 기술과 API를 제공

- 서블릿 (Servlet): 웹 애플리케이션의 동적인 처리를 담당하는 서버 사이드 컴포넌트, 클라이언트의 요청을 처리하고 응답을 생성하는 데 사용

- JSP (JavaServer Pages): 서블릿을 보완하여 HTML과 Java 코드를 혼합하여 동적인 웹 페이지를 생성할 수 있는 기술

- EJB (Enterprise JavaBeans): 엔터프라이즈 애플리케이션의 비즈니스 로직을 개발하는 데 사용되는 서버 사이드 컴포넌트, 트랜잭션 처리, 보안, 분산 컴퓨팅 등을 지원

- JPA (Java Persistence API): 객체-관계 매핑을 위한 API, 객체와 데이터베이스 간의 매핑을 쉽게 처리할 수 있도록 도움

- JMS (Java Message Service): 메시지 기반의 비동기 통신을 지원하는 API, 분산 시스템 간의 메시지 교환을 가능하게 함

- JSF (JavaServer Faces): 웹 기반의 사용자 인터페이스(UI) 개발을 위한 프레임워크, 사용자 인터페이스 구성 요소를 제공하고 이벤트 처리, 데이터 바인딩 등을 지원

Java EE는 기업 환경에서 안정적이고 확장 가능한 애플리케이션을 개발하기 위한 다양한 기술과 API를 제공하여 생산성을 향상시키고 개발자들에게 표준화된 개발 경험을 제공.

● os 달라도 cpu 같으면 기계어 그대로 실행 가능한가?

- CPU는 기계어를 실행하는 주요 구성 요소

CPU는 기계어 명령어를 이해하고 실행할 수 있으며, 기계어는 CPU에서 직접 실행될 수 있는 저수준의 이진 코드
따라서, CPU가 동일하다면 동일한 기계어 코드를 실행할 수 있다. 기계어 코드는 CPU 아키텍처에 따라 다르지만, 동일한 CPU 아키텍처를 가진 컴퓨터에서는 기계어 코드가 호환된다.

하지만, 기계어 코드의 실행 가능 여부는 CPU 아키텍처뿐만 아니라 운영 체제(OS)에도 영향을 받는다. 운영 체제는 CPU와 상호작용하며 프로세스 관리, 메모리 관리, 입출력 등의 작업을 수행한다. 따라서, 운영 체제는 기계어 코드가 실행될 수 있는 환경을 제공해야 한다.

일반적으로, 기계어 코드는 운영 체제에 따라 다르게 처리될 수 있다. 운영 체제는 하드웨어와의 상호작용을 관리하고, 기계어 코드를 실행하는 프로세스를 제어하며, 필요한 자원을 할당하고 보호한다. 따라서, 다른 운영 체제에서 실행되기 위해서는 해당 운영 체제에 맞게 기계어 코드를 제대로 처리할 수 있도록 운영 체제에 의존하는 기능과 API를 사용해야 한다.

따라서, CPU가 동일하더라도 운영 체제에 따라 기계어 코드의 실행 가능 여부와 동작 방식이 달라질 수 있다. 이는 운영 체제의 기능, 시스템 호출 인터페이스, 드라이버 및 라이브러리 등과 관련이 있다.

 

같은 포맷이 아니라서,  기계어 코드는 CPU 아키텍처에 따라 다르기 때문에, 서로 다른 CPU 아키텍처를 가진 컴퓨터에서는 같은 기계어 코드를 실행할 수 없다. CPU 아키텍처에는 x86, ARM, MIPS 등 다양한 종류가 있으며, 각각의 아키텍처는 고유한 명령어 세트와 실행 방식을 가지고 있다.


 

 ● Node.js 설치

LTS (Long-Term Support) 버전은 소프트웨어의 장기적인 지원과 안정성을 보장하기 위해 사용되는 버전

 

LTS버전쓰는 이유:
- 안정성과 신뢰성: LTS 버전은 일정 기간 동안 지원되므로 오류 수정, 보안 패치, 버그 수정 등의 업데이트를 계속해서 제공받을 수 있다. 이는 소프트웨어의 안정성과 신뢰성을 유지하고 장애의 위험을 줄일 수 있다.

- 지원 및 유지 보수: LTS 버전은 긴 시간 동안 지원되기 때문에 기업 및 조직은 소프트웨어를 오랜 기간 동안 운영할 수 있다. 이는 시스템의 안정성과 신뢰성을 유지하면서 비용을 절감하고 운영 부담을 줄일 수 있다.

- 호환성: LTS 버전은 오랜 기간 동안 호환성을 유지하도록 설계, 이는 기존의 애플리케이션과 시스템과의 호환성을 보장하고 업그레이드 과정에서 발생할 수 있는 문제를 최소화한다.

- 표준화: LTS 버전은 보다 안정적이고 표준화된 기능을 제공하는 경우가 많다. 이는 다양한 환경에서 일관된 동작을 보장하며, 개발자들에게 일관된 개발 경험을 제공

- 업데이트 주기 관리: LTS 버전은 일정한 업데이트 주기를 가지고 있으며, 이는 조직이 업데이트 및 배포 계획을 수립할 수 있는 충분한 시간을 제공, 이는 시스템 업그레이드 및 유지 보수 계획을 수립하는 데 도움을 준다.

- LTS 버전은 주로 기업 및 조직에서 규모가 크고 중요한 시스템을 운영하거나 개발하는 경우에 선택되며, 장기적인 안정성과 지원을 필요로 하는 상황에서 유용

버전 확인

 

^o 저장 ^x 나가기

 

버전확인

 

SHA 256 확인

 

'Java웹 프로그래밍' 카테고리의 다른 글

Java기초 4  (0) 2023.05.30
Java기초 3  (0) 2023.05.26
Java기초2  (1) 2023.05.25
Java 기초  (0) 2023.05.24
프로그래밍 개론 1  (0) 2023.05.22