본문 바로가기
개발

JAVA 배경지식

by Haengsin 2023. 9. 25.

유투브로 게임 영상이나 보고 있다가,,

추천 영상에 JAVA 관련 잘 정리되고 설명도 유익한 영상 있어서 시청하며 공부할겸 따라 적어본다.

출처는 글 마지막에 작성하였다.

 

JDK, JRE, JVM

JAVA는 바이너리 코드(0과 1)밖에 해석 불가하다.

즉, 우리가 작성하는 프로그래밍 언어로 작성된 것은 컴퓨터가 이해 불가능하다.

 

컴파일

프로그래밍 언어로 작성된 코드를 바이너리 코드로 바꿔주는 과정.

 

이러한 컴파일을 해주는 프로그램을 컴파일러 라고 한다.

 

그런데 이러한 C언어의 경우 0과1의 조합은 OS 마다 다르다. 

Windows OS 에서 Hello World 를 출력하더라도 MAC OS 나 Linux OS 에서 출력되지 않을 수 있다.

따라서, 각각 다른 컴파일러(윈도우 C 컴파일러, MAC C 컴파일러, 리눅스 C 컴파일러)

 

그러나, JAVA의 경우 JAVA 컴파일러 하나만 존재한다.

JAVA 컴파일러 하나로부터 생성된 0과 1 바이너리 코드가 각 OS(Windows, MAC, Linux)에 바로 가는 것이 아니라

각 OS 위에 있는 JVM 으로 전달된다.

 

JVM (Java Virtual Machine)

JVM은 컴파일된 바이너리 코드와 운영체제 사이에서 둘을 호환시켜주는 역할을 한다.

이 JVM은 운영체제마다 각각 있다. 

따라서, JAVA 같은 경우에 컴파일된 파일 하나만 있다면 JVM이 OS에 맞게 읽고 검증하고 실행한다.

JVM은 JAVA 외에 다른 언어에서도 사용하고 있다.

 

JDK > JRE > JVM

JDK, JRE, JVM으로 큰 순서라고 이해하면 된다.

JDK 를 설치하면 JRE 와 JVM 도 함께 설치된다. 즉, "JAVA의 버전 = JDK의 버전" 이 된다.

JRE (JAVA Runtime Environment = JVM + 자바 프로그램)

- 자바 실행 환경(JVM 실행에 필요한 여러 라이브러리 파일 등)의 약자

- JVM의 실행환경을 구현

 

JDK (Java Development Kit = JRE + 개발을 위한 도구)

- 자바 개발 도구의 약자.

- JRE는 JVM 실행을 위한 도구가 들어있다면, JDK 는 개발을 위한 도구가 들어있다.

- 예를 들어, 컴파일을 한 결과물을 JVM이 실행시켜준다. 그 떄 그 컴파일러 그리고 디버그 도구들이 JDK 에 들어있다.

 

  • JDK에는 버전이 있고 각 버전 별로 새로운 기능이 추가되거나 기존 기능이 사라진다.
    • JAVA 버전 중 LTS(Long Time Support) 라는 버전이 있다. 오래 지원되는 버전을 뜻한다.
  • 다양한 회사에서 만들어진 다양한 종류의 JDK 가 존재
    • Oracle JDK : Oracle에서 만든 JDK. 개인용은 무료, 기업용은 유료. 
    • Open JDK : Oracle JDK와 비슷한 성능. 언제나 무료.

 

빌드(Build)와 실행

1. 빌드(Build)

소스 코드 파일을 컴퓨터에서 실행할 수 있는 "독립 SW 가공물"로 변환시키는 과정.

- 독립 SW 가공물 = Artifact

단순히 컴파일하는 것과는 다르다.

빌드를 세분화 하면,

1) 소스 코드를 컴파일 한다.

2) 테스트 코드를 컴파일 한다.

- 테스트 코드: 내가 작성한 코드를 자동 테스트해주는 코드를 추가로 작성한 것.

- 우리가 사용하고 있는 비즈니스 로직에 내가 새로운 요구사항을 반영하였을 때 기존의 로직이 잘 돌아가는지

3) 테스트 코드를 실행한다.

4) 테스트 코드 리포트를 작성한다.

5) 기타 추가 설정한 작업들을 진행한다.

6) 패키징을 수행한다.

- JRE에 포함되는 기본 라이브러리 외에 현업에서는 다른 사람이 만들어 놓은 오픈 소스를 많이 가져다 사용한다.

- 이 오픈소스를 우리가 사용한 코드와 패키징(하나로 묶는 것)

7) 최종 SW 결과물(Artifact)을 만들어 낸다.

 

2. 실행(Run)

내가 작성한 코드(혹은 테스트 코드)를 컴파일을 거쳐, 작동시켜 보는 것

"독립 SW 가공물"이 나올 수도 있고, 나오지 않을 수도 있다.

  • 주의: 인터프리터 언어는 컴파일이 필요 없다. 
    • JAVA스크립트, Python 과 같이 컴파일이라는 것이 없이 인터프리터가 한줄씩 한줄씩 실행시켜주는 언어

 

Build Tool

1. 소스 코드의 빌드 과정을 자동으로 처리해주는 프로그램

2. 외부 소스 코드(외부 라이브러리) 자동 추가, 관리

 

JAVA에서 사용되는 Buld Tool 의 경우, 아래 3가지가 있다.

1) Apache ANT (2000년대 초/중반)

- 설정을 위해 xml을 사용한다.

(xml은 옛날에 사용하던 웹 통신 데이터 형태)

- 간단하고 사용하기 쉽다고 한다.

- 복잡한 처리를 하려 하면 빌드 스크립트가 장황해져 관리가 어렵다.

- 외부 라이브러리를 관리하는 구조가 없다.

2) Maven (아직도 많이 사용되나, 신규 프로젝트에는 지양)

- 설정을 위해 xml을 사용한다.

- 외부 라이브러리를 관리할 수 있다.

- 장황한 빌드 스크립트 문제를 해결했다.

- 특정 경우에 xml이 복잡해진다. xml 자체의 한계가 있다.

3) Gradle (가장 최신에 나온 JAVA Build Tool, 신규 프로젝트에 많이 사용)

- 설정을 위해 groovy 언어(JVM언어)를 사용한다. (xml 대신)

- 외부 라이브러리를 관리할 수 있다.

- 유연하게 빌드 스크립트를 작성할 수 있다.

- 성능이 뛰어나다.

 

출처
 https://www.youtube.com/watch?v=f0cAmTYo4tQ

 https://www.youtube.com/watch?v=L19wXSpv5cs