Java기초지식 정리

wooni·2023년 5월 24일

Java

목록 보기
1/6

Java를 사용 하기전 기초지식



용어의 정립 개념으로 정리함

1. JVM (Java Virtual Machine)

  • 자바 JVM은 자바로 작성된 프로그램을 싱행하는 데 사용되는 가상머신
  • JVM은 자바 어플리케이션을 바이트코드로 변환하고, 이 바이트코드를 OS(운영체제)에
    관계없이 실행 가능하다.
  • 독립적인 플랫폼 특성을 가짐.

2. JRE (Java Runtime Environment)

  • 자바 어플리케이션을 실행환경을 구현
  • JVM과 핵심 라이브러리 및 자바 런타임 환경에서 사용하는 리소스 파일을 가지고 있다.
  • 개발 관련 도구는 포함하지 않는다.

3. Server JRE

  • JRE에서 PC용기능을 제거하고 서버기능을 추가한 제품
  • 서버실행에 최적화 되있음

4. JDK (Java Development Kit)

  • 자바 언어를 사용하여 프로그램을 개발하기 위한 도구(tool)
  • JRE와 JVM이 포함되있다.
  • 자바프로그램 작성, 컴파일, 테스트 및 디버깅을 할 수 있다.

5. Java EE (Java Enterprise Edition)

  • 기업용 자바 개발도구
  • 동시, 멀티 유저용 APP 제작기술 지원
  • 일반적으로 J2EE(Java 2 Platform, Enterprise Edition) 로 알려져있음
  • 주의! Java SE를 포함하지 않음.

그외 알아두면 좋은 용어정리 (지속 업데이트 예정)

  1. 바이트코드 (bytecode)
    • 컴파일의 결과물 Java에선 .class에 번역된 코드
    • p-code라고도 불림
  2. p-code
    • JVM에서 실행되는 중간언어
    • 플랫폼에 독립적
    • 스택 기반 언어 즉, 연산에 사용되는 데이터는 스택에 저장 또는 피연산자를 가져와 연산을 수행
    • 스택에서 잘못된 값을 참조하는것을 방지

      ⚠️ 스택이란?
      LIFO(Last In First Out) 자료구조
      마지막에 들어온 데이터가 가장 먼저나가는 구조
      함수호출을 추적하는데 사용
      함수를 호출하면 함수의 호출 정보가 스택에 저장 -> 종료되면 스택에서 호출정보 OUT

  3. 암호화 해시함수 (MD5, SHA256)
    • 해시함수란?
      • 입력 데이터를 고정길이의 출력 데이터로 변환하는 함수
      • 데이터의 무결성을 검사하고, 비밀번호를 암호화 하는데 사용
    • MD5
      • 128비트 해시를 생성
      • 1991년에 발표되어 사용되 왔으나, 2004년에 해시 충돌공격이 발견되며 사용을 안하는 추세
    • SHA256
      • 256비트 해시를 생성
      • MD5보다 복잡한 알고리즘을 사용, 더 큰 해시값을 생성하여 충돌공격에 강함
      • 블록체인기술에 사용하고 있음
      • 아직까지 해킹을 한 사례는 없으나 블록체인기술의 발전에 따라 언제나 해킹가능성은 열어둘것

참조 : (https://losskatsu.github.io/blockchain/sha256/#)



compile(컴파일)

컴파일의 기본개념부터 알아보자

  • 사람이 이해하는 언어를 컴퓨터가 이해하는 언어로 번역해 주는 과정
  • 소스코드(작성한코드)를 기계어(컴퓨터가 이해하는 코드)로 바꿔주는 것을 compile(컴파일),
    기계어를 실행파일로 바꿔주는 것을 Link(링크)라고 정의
  • 컴파일과 링크의 기능을 하는 것을 컴파일러라 정의한다.

컴파일의 방식은 코드를 한번에 번역하여 실행파일에 저장 후 실행하는 방식이다.
동시통역처럼 바로 번역하는 방식도 있다. 바로 인터프리트 방식이다.

1. 인터프리트(interpret) 방식

  • 기계어로 변환하지 않고 소스를 읽어서 실행 즉, 한마디씩 동시통역 해주는것
  • 실행할 때마다 소스파일을 읽어서 실행 속도가 느린것이 단점

그렇다면 자바는 어떤방식으로 작동할까? 정답은 2가지 방법을 다 사용한다.
이것을 Hybrid방식이라고 말한다.


2. Java Hybrid Compile방식

  • 컴파일 + 인터프리트 방식

  • 예를들어 소스코드 Hello.java 파일을 javac Hello.java로 컴파일 하면
    Hello.class 바이트코드 파일이 생성되고 이것을 java hello 라고 명령어를 입력해주면 JVM으로 읽어 인터프리트 방식으로 실행하여 출력하게 된다.


3. 왜 자바가 Hybrid 방식으로 동작하는가?

  • 자바는 어느 운영체제에 관계 없이 소스코드 한번만 작성하면 모두 동일하게 작동된다.

  • 컴파일된 자바 .class 파일은 각 운영체제에 맞게 JVM에서 변환되어 각 플랫폼에 맞게 번역되는
    방식이다.

  • 이런이유로 자바는 하이브리드 방식으로 작동한다.


여기서 또 문제점이 있다. 바로 .class 파일은 JVM을 거쳐서나오기에 속도가 느리다는 것이다.
이것을 해결하기 위한 기술이 JIT 이다.

4. JIT (Just-In-Time)

  • 중간언어에서 기계어로 컴파일 될때 자주 반복실행되는 코드를 임시저장하여 실행속도를 높이는 기술
  • 자주반복되는 코드는 가상환경에서 cache 즉 임시보관장소에 저장하여 실행속도를 높이는것
  • 자바, 파이썬, 자바스크립트 와 같은 인터프리터언어에 사용
  • 장점
    • 컴파일 시간이 짧음
    • 컴파일 대상 플랫폼에 맞게 코드를 최적화 하기 쉬움
  • 단점
    - 실행속도가 느림
    - 기계코드가 아니기에 플랫폼에 의존적

그외 기술 AOT (Ahead-of-time)

  • 중간언어에서 소스코드를 실행시간 전에 기계코드로 컴파일 하는것을 말한다.
  • 게임, 웹 브라우저 같은 실행속도가 중요한 애플리케이션에 사용
  • 장점
    • 실행 속도가 빠름
    • 기계코드 이기에 플랫폼에 독립적
  • 단점
    • 컴파일 시간이 오래걸림
    • 컴파일 대상 플랫폼에 맞게 코드를 최적하 하기 어려움

profile
Backend

0개의 댓글