다음은 글은 infrean의 "자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]" 강의의
학습 목적으로 작성된 것입니다. 강의의 디테일한 내용이나, 코드 등은 빠져있을 수 있습니다.
0. JAVA란?
JDK, JVM, JRE, gradle, maven ...?
들어보기는 했지만 정확한 의미를 알고 있지 못했다.
JDK, JVM, JRE을 먼저 설명하고, Gradle, maven을 이후에 설명하겠다.
1. JAVA라는 언어를 컴퓨터가 어떻게 알아들을까?
처음 질문은 이렇게 시작한다.
컴퓨터는 원론적으로 0과 1 밖에 알지 못한다.
우리가 화면에서 보는 high-level의 언어를 0,1(바이너리 코드)로 이루어진 machine language로 변환하는 과정이 필요하다.
프로그래밍 언어로 작성된 소스 코드를 기계어나 바이너리 코드로 변환하는 과정을 "Compile"이라고 한다.
그러나 이 바이너리 코드를 처리하는 과정은 여러 운영체제에 따라 다를 수 있다.
즉 같은 C 컴파일러를 사용했다고 해도, 운영체제에 따라 다른 값이 출력될 수도 있다는 말이다.
그럼 결론적으로 OS에 따른 여러가지 컴파일러를 사용해한다는 말이다.
- C 컴파일러: C 언어는 컴파일된 코드가 특정 운영체제와 하드웨어 아키텍처에 종속적이다.
따라서 같은 C 소스 코드를 사용하여 여러 운영체제에서 실행 파일을 생성할 때, 각 운영체제에 맞는 컴파일러를 사용해야 한다.
EX) Windows에서는 Visual Studio 컴파일러, Linux에서는 GCC
- Java 컴파일러: Java는 중간 언어인 바이트코드(Java bytecode)를 생성한다.
여기서 중요한 개념이 나온다.
바이트코드는 특정 운영체제나 아키텍처에 독립적이다.
Java 프로그램은 Java Virtual Machine (JVM)에서 바이트코드를 실행한다.
JVM은 각 운영체제에 맞게 구현되어 있고, 이러한 가상 머신을 통해 Java 프로그램은 어떤 운영체제에서든 실행될 수 있다.
=> 호환성을 가질 수 있게 해준다!!!
따라서 Java는 "한 번 작성하고 어디서든 실행한다(Write Once, Run Anywhere)"는 원칙을 따른다!
OK! 그럼 이제 JVM이 무엇인지는 알았다.
그렇다면 JRE와 JDK 란 무엇일까?
1-1. JVM
- 자바 가상 머신(Java Virtual Machine)의 약자로, OS 별로 다르게 존재한다.
- 바이너리 코드를 읽고 검증하고 실행한다.
1-2. JRE
- 자바 실행 환경(Java Runtime Environment)의 약자로, JVM + 자바 프로그램 실행에 필요한 라이브러리 파일 등을 포함한다.
- JVM을 실행시킬 실행 환경을 구성
1-3. JDK
- 자바 개발 도구(Java Development Kit)의 약자로, JDK + 개발을 위한 도구가 들어있다.
- 컴파일러, 디버그 도구 등이 포함되어 있다.
=> JDK는 JRE와 JVM을 포함하고 있고,
즉, JAVA의 버전은 곧 JDK의 버전이 된다.
1-4. JAVA의 VERSION
JAVA의 버전이 업그레이드 되며, 여러 기능들이 추가된다.
(프로그래밍 언어론에서 배우는 제네릭스나 람다식 같은 것들)
* 그런데, 특이하게 LTS라는 버전이 따로 있다.
LTS는 Long Time Support의 약자로, 오랫동안 지원하므로 지속적으로 사용하는데에 무리가 없을 것임을 보장해준다는 의미이다.
(해당 버전에서 지원하는 서비스들이 deprecated 될 가능성이 적다는 것이다.)
8, 11, 17이 현재 LTS 버전이다.
(그래서 11이나 17 버전을 택하면, 현재 서비스들을 거의 대부분 사용할 수 있다.)
- Oracle JDK : 오라클에서 만든 JDK. 개인에게 무료, 기업용은 유료
- Open JDK : Oracle JDK와 비슷한 성능. 언제나 무료
2. Build와 Run
2-1. Build란?
소스 코드 파일을 컴퓨터에서 실행할 수 있는 독립 SW 가공물 (실행파일; Artifact) 로 변환시키는 과정.
빌드의 과정을 세분화 하면, 컴파일, 링크, 테스트, 배포 등으로 이루어진다.
테스트..?
2-2. Test Code
테스트 코드 : 내가 자성한 코드를 자동 테스트해주는 코드를 추가로 작성한 것.
기능적으로 부분적으로 테스트 해 볼 수도 있다.
쉽게 intellij에서 main folder아래에 test folder에서 보통 테스트 한다.
(요즘에는 test 코드를 짜는 개발자를 우대한다.)
2-3. Run이란?
실행(run) : 내가 작성한 코드 (혹은 테스트 코드) 를 컴파일을 거쳐 작동시켜 보는 것
-> 독립 SW 가공물이 나올 수도 있고, 나오지 않을 수도 있다.
🚨주의 : 인터프리터 언어는 컴파일이 필요 없다
이러한 빌드 과정을 수동으로 매번 한다???
-> 실수가 많이 나오고, Resource가 많이 든다. (Expensive Cost)
=> Build Tool이 제공된다!
3. JAVA의 Build Tool
3-1. Build Tool
- 소스코드의 빌드 과정을 자동으로 처리 해주는 프로그램
- 외부 소스 코드 (외부 라이브러리) 자동 추가, 관리
3-2. JAVA의 Build Tool
APache Ant, Maven, Gradle 등이 있다.
1) Ant
설정을 위해 XML을 사용한다.
간단하고 사용하기 쉽다고 한다.
복잡한 처리를 하려 하면 빌드 스크립트가 장황해져 관리가 어렵다.
외부 라이브러리를 관리하는 구조가 없다.
2000년대 초중반에 많이 사용했다. (강사님도 실제로 본 적도 없다고 한다... 전설의 ant)
2) Maven
설정을 위해 XML을 사용한다.
외부 라이브러리를 관리할 수 있다.
장황한 빌드 스크립트 문제를 해결했다.
특정 경우에 XML이 복잡해진다.
XML 자체의 한계가 있었다.
Ant가 가지고 있는 단점들을 대부분 극복하였으나 신규 PJ에는 사용을 지양하는 편이다.
3) Gradle
설정을 위해 groovy 언어를 사용한다.
외부 라이브러리를 관리할 수 있다.
유연하게 빌드 스크립트를 작성할 수 있다.
성능이 뛰어나다.
가장 최신에 나온 자바 빌드 툴이며 특히 신규 PJ에서 많이 사용되고 있다.
다음은 글은 infrean의 "자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]" 강의의
학습 목적으로 작성된 것입니다. 강의의 디테일한 내용이나, 코드 등은 빠져있을 수 있습니다.
0. JAVA란?
JDK, JVM, JRE, gradle, maven ...?
들어보기는 했지만 정확한 의미를 알고 있지 못했다.
JDK, JVM, JRE을 먼저 설명하고, Gradle, maven을 이후에 설명하겠다.
1. JAVA라는 언어를 컴퓨터가 어떻게 알아들을까?
처음 질문은 이렇게 시작한다.
컴퓨터는 원론적으로 0과 1 밖에 알지 못한다.
우리가 화면에서 보는 high-level의 언어를 0,1(바이너리 코드)로 이루어진 machine language로 변환하는 과정이 필요하다.
프로그래밍 언어로 작성된 소스 코드를 기계어나 바이너리 코드로 변환하는 과정을 "Compile"이라고 한다.
그러나 이 바이너리 코드를 처리하는 과정은 여러 운영체제에 따라 다를 수 있다.
즉 같은 C 컴파일러를 사용했다고 해도, 운영체제에 따라 다른 값이 출력될 수도 있다는 말이다.
그럼 결론적으로 OS에 따른 여러가지 컴파일러를 사용해한다는 말이다.
- C 컴파일러: C 언어는 컴파일된 코드가 특정 운영체제와 하드웨어 아키텍처에 종속적이다.
따라서 같은 C 소스 코드를 사용하여 여러 운영체제에서 실행 파일을 생성할 때, 각 운영체제에 맞는 컴파일러를 사용해야 한다.
EX) Windows에서는 Visual Studio 컴파일러, Linux에서는 GCC
- Java 컴파일러: Java는 중간 언어인 바이트코드(Java bytecode)를 생성한다.
여기서 중요한 개념이 나온다.
바이트코드는 특정 운영체제나 아키텍처에 독립적이다.
Java 프로그램은 Java Virtual Machine (JVM)에서 바이트코드를 실행한다.
JVM은 각 운영체제에 맞게 구현되어 있고, 이러한 가상 머신을 통해 Java 프로그램은 어떤 운영체제에서든 실행될 수 있다.
=> 호환성을 가질 수 있게 해준다!!!
따라서 Java는 "한 번 작성하고 어디서든 실행한다(Write Once, Run Anywhere)"는 원칙을 따른다!
OK! 그럼 이제 JVM이 무엇인지는 알았다.
그렇다면 JRE와 JDK 란 무엇일까?
1-1. JVM
- 자바 가상 머신(Java Virtual Machine)의 약자로, OS 별로 다르게 존재한다.
- 바이너리 코드를 읽고 검증하고 실행한다.
1-2. JRE
- 자바 실행 환경(Java Runtime Environment)의 약자로, JVM + 자바 프로그램 실행에 필요한 라이브러리 파일 등을 포함한다.
- JVM을 실행시킬 실행 환경을 구성
1-3. JDK
- 자바 개발 도구(Java Development Kit)의 약자로, JDK + 개발을 위한 도구가 들어있다.
- 컴파일러, 디버그 도구 등이 포함되어 있다.
=> JDK는 JRE와 JVM을 포함하고 있고,
즉, JAVA의 버전은 곧 JDK의 버전이 된다.
1-4. JAVA의 VERSION
JAVA의 버전이 업그레이드 되며, 여러 기능들이 추가된다.
(프로그래밍 언어론에서 배우는 제네릭스나 람다식 같은 것들)
* 그런데, 특이하게 LTS라는 버전이 따로 있다.
LTS는 Long Time Support의 약자로, 오랫동안 지원하므로 지속적으로 사용하는데에 무리가 없을 것임을 보장해준다는 의미이다.
(해당 버전에서 지원하는 서비스들이 deprecated 될 가능성이 적다는 것이다.)
8, 11, 17이 현재 LTS 버전이다.
(그래서 11이나 17 버전을 택하면, 현재 서비스들을 거의 대부분 사용할 수 있다.)
- Oracle JDK : 오라클에서 만든 JDK. 개인에게 무료, 기업용은 유료
- Open JDK : Oracle JDK와 비슷한 성능. 언제나 무료
2. Build와 Run
2-1. Build란?
소스 코드 파일을 컴퓨터에서 실행할 수 있는 독립 SW 가공물 (실행파일; Artifact) 로 변환시키는 과정.
빌드의 과정을 세분화 하면, 컴파일, 링크, 테스트, 배포 등으로 이루어진다.
테스트..?
2-2. Test Code
테스트 코드 : 내가 자성한 코드를 자동 테스트해주는 코드를 추가로 작성한 것.
기능적으로 부분적으로 테스트 해 볼 수도 있다.
쉽게 intellij에서 main folder아래에 test folder에서 보통 테스트 한다.
(요즘에는 test 코드를 짜는 개발자를 우대한다.)
2-3. Run이란?
실행(run) : 내가 작성한 코드 (혹은 테스트 코드) 를 컴파일을 거쳐 작동시켜 보는 것
-> 독립 SW 가공물이 나올 수도 있고, 나오지 않을 수도 있다.
🚨주의 : 인터프리터 언어는 컴파일이 필요 없다
이러한 빌드 과정을 수동으로 매번 한다???
-> 실수가 많이 나오고, Resource가 많이 든다. (Expensive Cost)
=> Build Tool이 제공된다!
3. JAVA의 Build Tool
3-1. Build Tool
- 소스코드의 빌드 과정을 자동으로 처리 해주는 프로그램
- 외부 소스 코드 (외부 라이브러리) 자동 추가, 관리
3-2. JAVA의 Build Tool
APache Ant, Maven, Gradle 등이 있다.
1) Ant
설정을 위해 XML을 사용한다.
간단하고 사용하기 쉽다고 한다.
복잡한 처리를 하려 하면 빌드 스크립트가 장황해져 관리가 어렵다.
외부 라이브러리를 관리하는 구조가 없다.
2000년대 초중반에 많이 사용했다. (강사님도 실제로 본 적도 없다고 한다... 전설의 ant)
2) Maven
설정을 위해 XML을 사용한다.
외부 라이브러리를 관리할 수 있다.
장황한 빌드 스크립트 문제를 해결했다.
특정 경우에 XML이 복잡해진다.
XML 자체의 한계가 있었다.
Ant가 가지고 있는 단점들을 대부분 극복하였으나 신규 PJ에는 사용을 지양하는 편이다.
3) Gradle
설정을 위해 groovy 언어를 사용한다.
외부 라이브러리를 관리할 수 있다.
유연하게 빌드 스크립트를 작성할 수 있다.
성능이 뛰어나다.
가장 최신에 나온 자바 빌드 툴이며 특히 신규 PJ에서 많이 사용되고 있다.