Street Knowledge
[StreetKnowledge] When and Why author made the Java?
김책은
2024. 3. 29. 21:27
Define my problem(domain)
- Problem : Interested in Car, Not Embeded
- Solution : Cloud Engineer, Sever Engineer
Review widely used domain specific languages
- 현대자동차 클라우드 기반 MLOps 엔지니어링 채용공고
https://talent.hyundai.com/apply/applyView.hc?recuYy=2024&recuType=N2&recuCls=202 - BMW Software Engineer / Architect - Cloud Supply Chain
https://www.bmwgroup.jobs/de/en/jobfinder/job-description-copy.83439.html - BMW group Cloud&DevOps Engineer
https://www.linkedin.com/in/navleen-kaur-31815237/ - conclusion : Java !
Select an appropriate language and study:
- Language author
- James Gosling
- When and Why author made the language
- Java의 전신 oak
- 가전제품 내 장착하는 하드웨어 칩에 기능을 넣기위한 목적의 언어였으나 하드웨어가 oak 프로그램을 구동할 성능을 갖추지 못해 실패했다.
- 그러나 그 실패는 결코 의미없지 않았다. oak를 위해 노력했던 시간이 없었다면 시대가 바뀌어 하드웨어, 즉 컴퓨터가 발달했을 때가 도래했어도 java를 딱 맞춰 낼 수 없었을 것이기 때문이다.
- 역시 기회는 준비된 자에게...
- UCSD Pascal p-code를 PERQ 워크스테이션에서 DEC VAX 컴퓨터 시스템으로 이식하여 VAX 에뮬레이터를 작성하는 과정에서 자바 가상 머신의 개념에 영감을 받았다.
- UCSD Pascal : 이식가능하고 기계 독립적인 운영체제 UCSD p-System에서 돌아가는 pascal 프로그래밍 언어(instruction set) 시스템
- UCSD Pascal 컴파일러에 의해 생성된 가상 머신 코드
- UCSD Pascal 가상머신인 p-Machine을 정의하여 특정 플랫폼에 종속되지 않는 machine independence를 달성
- 따라서 UCSD Pascal은 다양한 하드웨어 및 운영체제에서 호환성을 제공하는 데 사용되었다.
- DEC VAX
- 명령어 집합 아키텍처(ISA)
- Virtual Address eXtension
- CISC 아키텍처로, 복잡한 명령어 세트를 지원함으로써 소프트웨어와 하드웨어 플랫폼에서 호환성을 제공하면서 다양한 응용 프로그램 실행 가능
- VAX 에뮬레이터
- VAX 아키텍처를 에뮬레이션하여 VAX 시스템(하드웨어, 운영체제)을 소프트웨어적으로 시뮬레이션 하는 프로그램
- ex : 기존의 VAX 시스템을 유지 보수하기 위해 legacy 시스템을 유지하는 경우, 과거에 작성된 VAX 시스템용 소프트웨어를 이해하거나 테스트하려는 경우
- VAX 아키텍처를 에뮬레이션하여 VAX 시스템(하드웨어, 운영체제)을 소프트웨어적으로 시뮬레이션 하는 프로그램
- UCSD Pascal : 이식가능하고 기계 독립적인 운영체제 UCSD p-System에서 돌아가는 pascal 프로그래밍 언어(instruction set) 시스템
- UCSD p-System과 java의 공통점은 둘 다 가상 머신을 사용하여 운영체제와 하드웨어 차이점을 숨기고 해당 가상 머신에 작성된 프로그램을 사용하여 크로스 플랫폼 지원한다는 것
- 가상머신을 대상 컴퓨터의 완전한 운영체제로 사용하거나
- 다른 운영체제(호스트 운영체제)에서 격리된 가상머신환경으로 실행될 수 있다.
- Java의 전신 oak
Pros of the Java
- simple
- c, c++의 포인터와 같은 복잡한 특징들을 전부 제거하여 코드를 더 쉽게 수행할 수 있다.
- JVM의 가비지 컬렉터가 불필요한 메모리를 알아서 정리해준다.
- Garbage Collection : 프로그램이 실행되는 동안 JVM의 Heap영역에서 동적으로 할당했던 메모리 중 사용되지 않는 객체를 자동으로 식별하고 제거하여 메모리를 해제하는 프로세스
- 대신 java에서 명시적으로 불필요한 데이터를 표현하기 위해서 일반적으로 null을 선언해준다.
- JVM 메모리에서는 객체들은 실질적으로 Heap영역에서 생성되고 Method Area/Stack Area에서는 Heap Area에 생성된 객체의 주소만 참조하는 형식으로 구성
- Mark and Sweep+Compation
- Root Space로부터 그래프 순회를 통해 참조관계를 확인하고
- 참조하고 있지 않는 객체(Unreachable)들을 Heap에서 제거하고
- 분산된 객체들을 Heap의 시작주소로 모아 메모리가 할당된 부분과 그렇지 않은 부분으로 압축하는 과정
- 알고리즘, 운영체제에서 배웠던 것들이 연결되어 이해에 도움이 되어 재밌었다.
- JVM의 가비지 컬렉터가 불필요한 메모리를 알아서 정리해준다.
- c, c++의 포인터와 같은 복잡한 특징들을 전부 제거하여 코드를 더 쉽게 수행할 수 있다.
- portability
- 플랫폼 독립적인 언어이기 때문에 시스템의 하드웨어와 상관없이 실행될 수 있다.
- 따라서 빌드 프로세스도 플랫폼에 종속되지 않아 간단하고 일관되다.
- Java Class + Java API + JVM만 있으면 Write once, Run Anywhere 가능
- OOPs Language
- 부품에 해당하는 객체들을 먼저 만들고 하나씩 조립, 연결하여 전체의 프로그램을 완성하는 방식
- 프로그램 구현 시 시간의 흐름순(프로시저 기법)이 아닌 객체 간 관계와 협력을 기반으로 프로그래밍한다.
Cons of the Java
- Stop-The-World(STW)
- GC를 수행하기 위해 JVM이 애플리케이션 실행을 멈추는 것. Gc를 실행하는 thread를 제외한 나머지 thread들은 모두 작업을 멈춘다. 따라서 서비스 이용에 차질이 생길 수 있다.
- ex : 익스플로러는 이 GC를 너무 자주 실행하여 성능 문제를 일으키는 것으로 악명이 높았다.
- 실시간성이 매우 강조되는 프로그램일 경우 GC에게 메모리를 맡기는 것은 맞지 않다.
- GC를 수행하기 위해 JVM이 애플리케이션 실행을 멈추는 것. Gc를 실행하는 thread를 제외한 나머지 thread들은 모두 작업을 멈춘다. 따라서 서비스 이용에 차질이 생길 수 있다.
- Standard and/or Roadmap of the language
- EJB(Enterprise JavaBeans)의 등장
- 기업환경의 시스템을 구현하기 위한 서버 측 컴포넌트 모델
= 서버사이드에서 비즈니스로직을 처리하는 분산형 컴포넌트 모델- 서버 측에서 애플리케이션을 개발할 경우, 종래의 애플리케이션에서 필요로 하는 비즈니스로직 뿐만 아니라 시스템 서비스를 이용한 데이터베이스처리와 트랜젝션 처리의 프로그램을 필요로 하기 때문에 애플리케이션 개발에 시간이 걸린다.
- 근데 또 각각의 애플리케이션 서버에서는 독자적인 api가 쓰이고 있기 때문에 각 회사의 api를 사용해서 작성한 애플리케이션에는 이동성도 부족하고 부품화도 어려워진다.
- 이런 문제를 해결하기 위해 EJB가 태어난 것.
- 서버 애플리케이션의 개발을 용이하게해 다중 플랫폼과 제품 간의 이동성을 실현하기 위해
- 독립한 부품이 아닌, Sun Microsystems사가 제창한 규약
- 비즈니스로직과 시스템 서비스를 이용하는 로직을 분산해 그 사이의 규약을 규정
- EJB Bean : 비즈니스 로직을 탑제한 부품
- EJB Container
- DB처리, 트랜잭션 처리 등의 시스템 서비스를 이용한 로직을 감추고 있는 부품
- EJB 서버와 Enterprise Bean 중간에 위치해 클라이언트 애플리케이션은 그 컨테이너를 경유해서 Enterprise Bean에 접근한다.
- docker와 k8s의 container가 생각났다. docker container가 응용프로그램을 패키징하고 그에 필요한 모든 종속성을 포함하는 격리된 환경을 제공하는 것을 떠올렸다. 그 둘이 완전히 같은 의미로 쓰인 것은 아니겠지만 EJB Container 역시 EJB bean을 품고 애플리케이션 개발을 위한 EJB 컴포넌트의 런타임 환경과 여러 기능(트랜잭션 관리, 보안, 스레드 관리, 분산환경에서의 컴포넌트 라이프사이클 관리, 컴포넌트 간 통신)들을 제공한다는 점과 연관지으니 이해가 더 쉬웠다.
- 기업환경의 시스템을 구현하기 위한 서버 측 컴포넌트 모델
- EJB(Enterprise JavaBeans)의 등장
Famous open source softwares using the language
- Jenkins : 빌드, 테스트, 배포 프로세스를 자동화하여 소프트웨어 품질 향상과 개발 생산성 향상에 도움을 주는 도구.
- CI (Continuous Integration)
- 여러 명의 많은 개발자들의 코드 베이스를 계속해서 통합해서 가능한 빠르게 배포를 하는 것을 의미
- 소스 변경사항을 프로젝트에 지속적으로 통합
- CI (Continuous Integration)
- CD (Continuous Delivery/Deployment)
- 내부 사용자든 최종사용자든 서비스를 지속적으로 배달한다. 즉, 코드 베이스가 항상 배포 가능한 상태를 유지할 수 있게 해준다.
- 코드 베이스를 사용자가 사용 가능한 환경에 배포하는 것을 자동화하는 것