Notice
Recent Posts
Recent Comments
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Archives
Today
Total
관리 메뉴

채록채록

[StreetKnowledge] When and Why author made the Java? 본문

Street Knowledge

[StreetKnowledge] When and Why author made the Java?

김책은 2024. 3. 29. 21:27

Define my problem(domain)

  1. Problem : Interested in Car, Not Embeded
  2. Solution : Cloud Engineer, Sever Engineer

Review widely used domain specific languages

  1. 현대자동차 클라우드 기반 MLOps 엔지니어링 채용공고
    https://talent.hyundai.com/apply/applyView.hc?recuYy=2024&recuType=N2&recuCls=202
  2. BMW Software Engineer / Architect - Cloud Supply Chain
    https://www.bmwgroup.jobs/de/en/jobfinder/job-description-copy.83439.html
  3. BMW group Cloud&DevOps Engineer
    https://www.linkedin.com/in/navleen-kaur-31815237/
  4. conclusion : Java !

Select an appropriate language and study:

  1. Language author
    1. James Gosling
  2. When and Why author made the language
    1. Java의 전신 oak
      1. 가전제품 내 장착하는 하드웨어 칩에 기능을 넣기위한 목적의 언어였으나 하드웨어가 oak 프로그램을 구동할 성능을 갖추지 못해 실패했다.
      2. 그러나 그 실패는 결코 의미없지 않았다. oak를 위해 노력했던 시간이 없었다면 시대가 바뀌어 하드웨어, 즉 컴퓨터가 발달했을 때가 도래했어도 java를 딱 맞춰 낼 수 없었을 것이기 때문이다.
        1. 역시 기회는 준비된 자에게...
    2. UCSD Pascal p-code를 PERQ 워크스테이션에서 DEC VAX 컴퓨터 시스템으로 이식하여 VAX 에뮬레이터를 작성하는 과정에서 자바 가상 머신의 개념에 영감을 받았다.
      1. UCSD Pascal : 이식가능하고 기계 독립적인 운영체제 UCSD p-System에서 돌아가는 pascal 프로그래밍 언어(instruction set) 시스템
        1. UCSD Pascal 컴파일러에 의해 생성된 가상 머신 코드
        2. UCSD Pascal 가상머신인 p-Machine을 정의하여 특정 플랫폼에 종속되지 않는 machine independence를 달성
        3. 따라서 UCSD Pascal은 다양한 하드웨어 및 운영체제에서 호환성을 제공하는 데 사용되었다.
      2. DEC VAX
        1. 명령어 집합 아키텍처(ISA)
        2. Virtual Address eXtension
        3. CISC 아키텍처로, 복잡한 명령어 세트를 지원함으로써 소프트웨어와 하드웨어 플랫폼에서 호환성을 제공하면서 다양한 응용 프로그램 실행 가능
      3. VAX 에뮬레이터
        1. VAX 아키텍처를 에뮬레이션하여 VAX 시스템(하드웨어, 운영체제)을 소프트웨어적으로 시뮬레이션 하는 프로그램
          1. ex : 기존의 VAX 시스템을 유지 보수하기 위해 legacy 시스템을 유지하는 경우, 과거에 작성된 VAX 시스템용 소프트웨어를 이해하거나 테스트하려는 경우
    3. UCSD p-System과 java의 공통점은 둘 다 가상 머신을 사용하여 운영체제와 하드웨어 차이점을 숨기고 해당 가상 머신에 작성된 프로그램을 사용하여 크로스 플랫폼 지원한다는 것
      1. 가상머신을 대상 컴퓨터의 완전한 운영체제로 사용하거나
      2. 다른 운영체제(호스트 운영체제)에서 격리된 가상머신환경으로 실행될 수 있다.

Pros of the Java

  1. simple
    1. c, c++의 포인터와 같은 복잡한 특징들을 전부 제거하여 코드를 더 쉽게 수행할 수 있다.
      1. JVM의 가비지 컬렉터가 불필요한 메모리를 알아서 정리해준다.
        1. Garbage Collection : 프로그램이 실행되는 동안 JVM의 Heap영역에서 동적으로 할당했던 메모리 중 사용되지 않는 객체를 자동으로 식별하고 제거하여 메모리를 해제하는 프로세스
        2. 대신 java에서 명시적으로 불필요한 데이터를 표현하기 위해서 일반적으로 null을 선언해준다.
        3. JVM 메모리에서는 객체들은 실질적으로 Heap영역에서 생성되고 Method Area/Stack Area에서는 Heap Area에 생성된 객체의 주소만 참조하는 형식으로 구성
        4. Mark and Sweep+Compation
          1. Root Space로부터 그래프 순회를 통해 참조관계를 확인하고
          2. 참조하고 있지 않는 객체(Unreachable)들을 Heap에서 제거하고
          3. 분산된 객체들을 Heap의 시작주소로 모아 메모리가 할당된 부분과 그렇지 않은 부분으로 압축하는 과정
            1. 알고리즘, 운영체제에서 배웠던 것들이 연결되어 이해에 도움이 되어 재밌었다.
  2. portability
    1. 플랫폼 독립적인 언어이기 때문에 시스템의 하드웨어와 상관없이 실행될 수 있다.
    2. 따라서 빌드 프로세스도 플랫폼에 종속되지 않아 간단하고 일관되다.
    3. Java Class + Java API + JVM만 있으면 Write once, Run Anywhere 가능
  3. OOPs Language
    1. 부품에 해당하는 객체들을 먼저 만들고 하나씩 조립, 연결하여 전체의 프로그램을 완성하는 방식
    2. 프로그램 구현 시 시간의 흐름순(프로시저 기법)이 아닌 객체 간 관계와 협력을 기반으로 프로그래밍한다.

Cons of the Java

  1. Stop-The-World(STW)
    1. GC를 수행하기 위해 JVM이 애플리케이션 실행을 멈추는 것. Gc를 실행하는 thread를 제외한 나머지 thread들은 모두 작업을 멈춘다. 따라서 서비스 이용에 차질이 생길 수 있다.
      1. ex : 익스플로러는 이 GC를 너무 자주 실행하여 성능 문제를 일으키는 것으로 악명이 높았다.
      2. 실시간성이 매우 강조되는 프로그램일 경우 GC에게 메모리를 맡기는 것은 맞지 않다.
  2. Standard and/or Roadmap of the language
    1. EJB(Enterprise JavaBeans)의 등장
      1. 기업환경의 시스템을 구현하기 위한 서버 측 컴포넌트 모델
        = 서버사이드에서 비즈니스로직을 처리하는 분산형 컴포넌트 모델
        1. 서버 측에서 애플리케이션을 개발할 경우, 종래의 애플리케이션에서 필요로 하는 비즈니스로직 뿐만 아니라 시스템 서비스를 이용한 데이터베이스처리와 트랜젝션 처리의 프로그램을 필요로 하기 때문에 애플리케이션 개발에 시간이 걸린다.
        2. 근데 또 각각의 애플리케이션 서버에서는 독자적인 api가 쓰이고 있기 때문에 각 회사의 api를 사용해서 작성한 애플리케이션에는 이동성도 부족하고 부품화도 어려워진다.
        3. 이런 문제를 해결하기 위해 EJB가 태어난 것.
          1. 서버 애플리케이션의 개발을 용이하게해 다중 플랫폼과 제품 간의 이동성을 실현하기 위해
      2. 독립한 부품이 아닌, Sun Microsystems사가 제창한 규약
        1. 비즈니스로직과 시스템 서비스를 이용하는 로직을 분산해 그 사이의 규약을 규정
      3. EJB Bean : 비즈니스 로직을 탑제한 부품
      4. EJB Container
        1. DB처리, 트랜잭션 처리 등의 시스템 서비스를 이용한 로직을 감추고 있는 부품
        2. EJB 서버와 Enterprise Bean 중간에 위치해 클라이언트 애플리케이션은 그 컨테이너를 경유해서 Enterprise Bean에 접근한다.
        3. docker와 k8s의 container가 생각났다. docker container가 응용프로그램을 패키징하고 그에 필요한 모든 종속성을 포함하는 격리된 환경을 제공하는 것을 떠올렸다. 그 둘이 완전히 같은 의미로 쓰인 것은 아니겠지만 EJB Container 역시 EJB bean을 품고 애플리케이션 개발을 위한 EJB 컴포넌트의 런타임 환경과 여러 기능(트랜잭션 관리, 보안, 스레드 관리, 분산환경에서의 컴포넌트 라이프사이클 관리, 컴포넌트 간 통신)들을 제공한다는 점과 연관지으니 이해가 더 쉬웠다.

Famous open source softwares using the language

  1. Jenkins : 빌드, 테스트, 배포 프로세스를 자동화하여 소프트웨어 품질 향상과 개발 생산성 향상에 도움을 주는 도구.
    1. CI (Continuous Integration)
      1. 여러 명의 많은 개발자들의 코드 베이스를 계속해서 통합해서 가능한 빠르게 배포를 하는 것을 의미
      2. 소스 변경사항을 프로젝트에 지속적으로 통합
  2. CD (Continuous Delivery/Deployment)
    1. 내부 사용자든 최종사용자든 서비스를 지속적으로 배달한다. 즉, 코드 베이스가 항상 배포 가능한 상태를 유지할 수 있게 해준다.
    2. 코드 베이스를 사용자가 사용 가능한 환경에 배포하는 것을 자동화하는 것