JVM, JRE, JDK가 뭔가요?

📜 라디오 대본

얄코: 차에서 듣는 얄코 라디오! 얄코: 첫 번째 방송 시작합니다 얄코: 저는 얄팍한 유튜버 얄코 미토: 저 미친토끼 미토에요. 내 목소리 이게 아니었는데 얄코: 아, 그 '웹 공격과 방어' 영상에서는 제 목소리랑 똑같았는데 얄코: 여기서도 그러면 저랑 겹치니까 앞으로는 그 목소리로... 미토: 설정오류네요 설정오류 그리고 마지막 기억이 좀 흐릿한데 미토: 사자한테 보안가지고 막 뭐라고 하다가... 뒤졌구나 그때 미토: 지금 죽여놓고 되살려다가 부캐로 쓰겠다는거 아녜요 미토: 목소리는 헬륨 멕여가지고 얄코: 부캐...랑은 좀 다른 개념인데 여튼 얄코: 자 이 '얄코 라디오' 컨텐츠는요 얄코: 오늘 다룰 자바 관련 용어들처럼 얄코: 딱히 시각자료 없이도 설명 가능한 용어나 개념들을 얄코: 굳이 화면 들여다 볼 필요 없이 얄코: 출근길에 운전하면서 아니면 혼자 식사하시면서 얄코: 또는 그냥 소파에 눈감고 편히 앉아 쉬면서 얄코: 가볍게 귀로만 들으실 수 있도록 기획한 컨텐츠입니다 미토: 그냥 당신이 영상 만들기 편하려고 기획한 느낌인데 미토: 그래픽 작업 안 하고 싶어서 이러는거 아니에요! 얄코: 그런 면에서라기보다는요, 얄코: 사람들이 코딩 공부하면서 많이들 궁금해하지만 얄코: 막 일일이 일러스트 그리고 애니메이션 넣어가면서 얄코: 영상으로까지 힘들게 만들기엔 애매한 주제들 있잖아요 미토: 가성비 안 나오는것들요 가성비 얄코: 아니 쫌, 어쨌든 종종 그런 주제들도 얄코: 긴 강의나 영상 준비하는 중간중간에 얄코: 보다 적은 시간을 들여서 오디오 컨텐츠로 만들면 얄코: 구독자분들도 보다 많은 내용들을 접하실 수 있을거구요 미토: 그러면요 우리가요 네? 열일을 해야돼요 네? 미토: 가성비를 챙겼으니까요 좋은 컨텐츠들로 아주그냥 뽕을 뽑아야 미토: 누가 뭐라고 안하는 거인 거거든요 미토: 자, 여러분은요 막장 코딩방송 얄코라디오랑 함께하고 계시구요 미토: 오늘 주제는요 JVM이랑요 JRE랑요 JDK랑요 미토: 아 또 없나 이것들 이렇게 알아볼거에요 얄코: 이번 화는 시범운행같은거라고 생각해주시구요 얄코: 이러한 진행으로 괜찮다면 이후 본격적으로 얄코: 여러분이 궁금해하시는 내용들로 자주 찾아뵙겠습니다. 얄코: 자, JVM과 JRE 그리고 JDK 얄코: 자바 배우시는 분들은 다 접해보셨을 용어들이죠 얄코: 특이 이 JVM이란 용어는 자바 코드보다도 먼저 보셨을거에요 얄코: 자바 가상 머신이다, 한 번 작성해서 어디에서든 실행한다 얄코: 이런 말들 초반 이론 부분에서 많이들 들으셨을텐데 얄코: 이게 구체적으로 무슨 뜻이죠? 미토: 거기에 머신이란 말이 들어가서 사람 헷갈리게 만드는데 미토: 그냥 프로그램이에요 프로그램 JVM은 그냥 프로그램이다 미토: 그럼 뭐 하는 프로그램이냐 미토: 우리가 코딩할때 쓰는 자바나 C, 파이썬같은 언어들은 미토: 사실 우리같은 사람이나 토끼가 보기 편하라고 만든거란 말이에요 미토: 컴퓨터는 이거 못 읽어요. 컴퓨터는 0이랑 1만 알아듣는거 미토: 이거 다 알잖아요 제가 여러분을 존중을 하기 때문에 미토: 이거 다 안다고 가정하고 내가 얘기를 하는거거든요 미토: 그니까 이 컴퓨터란 애들은 01001001110 미토: 막 이렇게 쓰인 걸 갖다줘야 알아먹든단 얘기죠 얄코: 기계어라고 하죠. 2진수로 된, 바이너리로 작성된 언어 미토: 근데 이 기계어는 또 우리가 읽고 작성하기에는 토나오거든요 미토: 모니터에 막 1100101110010 이렇게 써있으면 어떻게 읽어요 그걸 미토: 이걸로 실무코딩을 할 수 있는 개체는 토끼중에는 없어요 제가 알기로는 얄코: 저희 인간 중에서도 의미있는 명수는 안 나올거에요 얄코: 폰 노이만이 그랬다는데 그것도 많이 단순한 옛날 프로그램이고 미토: 우리도 그 용궁 갔다온 선조분은 좀 가능하시지 않았을까 그정도죠 얄코: 여튼 우리가 읽고 작성할 수 있는 프로그래밍 언어를 얄코: 컴퓨터가 알아들을 수 있는 기계어로 바꿔주는 작업을 얄코: C나 자바같은 컴파일 언어에서는 컴파일러가 진행을 해주는거잖아요 얄코: 우리가 코딩한 결과가 미리, 기계어나 그에 가까운 언어로 얄코: 컴파일, 번역이 되는거죠. 컴파일러라는 번역가에 의해. 얄코: 파이썬같은 인터프리터 언어는 일단 논외로 할게요 얄코: 그럼 이 JVM이 있는 자바는, 같은 컴파일 언어인 얄코: C 등이랑은 어떤 점에서 다른거죠? 미토: 이 컴퓨터들이요 얘네가 또 다 같은 기계어를 쓰는게 아니에요 미토: 0이랑 1로 돼 있다고 다 같은 언어가 아닌거거든요 미토: 똑같이 C로 짜서 컴파일한 기계어인데 미토: 윈도우에서 돌게 컴파일한거는 미토: 맥이나 리눅스에서는 또 안 돈다 이 말이에요 미토: 그럼 어떻게 해야돼요. 프로그램이 돌 환경, 컴퓨터마다 미토: 거기에 맞는 기계어로 일일이 번역을 해줘야돼요 미토: 그래서 제가요 C로 프로그래밍 할 때요 미토: 기껏 컴파일해서 줬는데 아 내 컴퓨터에서는 안 돈다 그러면 미토: 이런 C프로그래밍 미토: 에이 C프로그래밍 얄코: 자, 알겠구요 얄코: 그런 문제를 해결하기 위해 만들어진 게 자바의 JVM인거죠 얄코: 쉽게 말하자면, 각 종류의 컴퓨터마다 얄코: JVM이라는 전담 통역센터가 있는거에요 얄코: 주재 대사관 같은거라고 생각하셔도 돼요 얄코: 우리가 자바로 코딩을 하고 나서 컴파일을 하면 얄코: 기계어는 아니고, 바이트코드란게 생겨요 얄코: 사람이 쓰는 자바 코드에서 컴퓨터가 읽는 기계어로의 얄코: 중간 단계에 있는 코드라고 생각하면 돼요 얄코: 우리가 자바로 Hello.java를 작성하고 나서 얄코: 파워쉘이나 터미널에 javac, 자바 컴파일러죠 얄코: javac Hello.java 이 명령을 내리면 얄코: 같은 위치에 Hello.class가 만들어지거든요 얄코: 이 .class 파일이 바이트코드인거에요 미토: 자바를 컴파일해서 점 클래스 바이트 코드 얄코: 그렇게 노래로 외우는거에요? 자바를 컴파일해서 미토: 자바를 컴파일해서 점 클래스 바이트 코드 미토: 안 잊어먹어요 이러면 얄코: 여튼 이 바이트코드를 실행할 컴퓨터에 깔린 JVM에 갖다주면 얄코: 그 컴퓨터가 이 프로그램을 실행할 때 이 JVM이 얄코: 바이트코드를 그때그때 기계어로다가 통역을 해주는거에요 얄코: 이 바이트코드를 쓴다는거에서 또 부수적으로 나오는 장점이 뭐냐면 얄코: 자바 뿐만이 아니라, Groovy나 Scala, Clojure, 얄코: 그리고 안드로이드 만들 때 접하는 Kotlin같은 언어들도 얄코: 다 JVM이 전용 바이트코드로 컴파일이 되거든요 얄코: 그 언어들로도 JVM을 돌리는 기계에서의 프로그램을 짤 수 있는거죠 미토: 아니 그럼 자바나 코틀린 말고 스칼라나 그루비 갖다가도 미토: 안드로이드 앱을 만들 수 있는거란 말이에요? 얄코: 굳이 하자면 하면 할 수 있어요. 자료나 그런게 많지 않아서 그렇지 얄코: 하나만 더 언급하자면 이 JVM처럼 주어진 코드를 얄코: 실행 시점에 그때그때 기계어로 '통번역'을 해주는 방식을 얄코: Just In Time 컴파일, 줄여서 JIT컴파일이라고 하거든요 얄코: 이 JIT컴파일러는 나중에 더 깊이 다뤄볼게요 미토: 자바를 컴파일해서 점 클래스 바이트 코드 미토: JVM에 넘겨주면 기계어로 번역이 된다네 미토: JIT 컴파일러 얄코: 뒷부분 갑자기 뭐에요 얄코: 그 노랜 좀 아닌 것 같구요 미토: 솔까 당신 목소리로 해 보기 민망한거 나한테 짬시키는거 아녜요 얄코: 여하튼 JVM은 자바로 짜서 컴파일한 소프트웨어들이 얄코: JVM이 깔린 어떤 종류의 컴퓨터에서든 돌 수 있게 해주는것 얄코: 이렇게 정리하면 되겠네요 얄코: 그래서 '한번 작성하면 모든 곳에서 실행한다' 얄코: Write Once Run Anywhere 얄코: 이 W-O-R-A가 자바의 원칙인거에요 미토: WORA면 워라네 워라 미토: 워라벨이란 말이 거기서 나온거죠. 한 번 쓰고 논다고 얄코: 아니에요 미토: 암튼 어딜 가든간에 현금 뽑으려면 ATM 찾듯이 미토: 어느 컴에서든 바이트코드 돌리려면 JVM 찾으면 되는것이다 얄코: 그건 라임 그럴듯하네요. 이젠 JRE로 넘어갈게요 얄코: JRE는 Java Runtime Environment의 약자죠 미토: 자바 런 타임. 자바가 뭐 달릴 시간이라는 거에요? 미토: 자바로 밤샘코딩 함 달려보다 죽어봐라? 미토: 그러라고 언어 이름도 커피 이름으로 지었나보네 미토: 카페인 들이붓고 겁나 달리라고 얄코: 그건 아니구요, 자 이 런타임이라는게 얄코: 컴파일 타임이랑 대조되는 말이거든요 얄코: 컴파일이란 건 아까 얘기한 그 번역 작업 얄코: 즉 코딩 다 하고 이걸 실행하거나 배포하기 전에 얄코: '미리' 해두는 번역 작업이잖아요 얄코: 그걸 하는 시점을 컴파일 타임이라고 하구요 얄코: 런타임은 반대로 이걸 run, 실행하는 시점을 말해요 얄코: 그러니까 이 JRE, 자바 런타임 환경이란 건 얄코: 자바로 짠 소프트웨어가 컴파일 및 빌드까지 다 된 다음 얄코: 이를 사용할 곳에 주어져서 실행이 될 때 얄코: 그 환경 요소들로서 필요한 것들인거죠 미토: 실행되는 시점이면은 바이트코드로 컴파일된 상태일거고 미토: 아니 그럼 그걸 JVM이 기계어로 읽어주면 되는건데 미토: 왜 또 뭐가 필요하다는거에요? 얄코: 소프트웨어라는 게, 딱 우리가 자바나 그런 언어로 얄코: 작성한 코드만으로 돌아갈 수 있는게 아니거든요 얄코: 예를 들어서 우리가 자바의 자료구조 기능들인 얄코: List나 Map, Set 같은 걸 사용할 수 있는 이유는 얄코: 우리가 그런 기능들을 일일이 다 구현했기 때문이 아니라 얄코: 그것들이 바이트코드로 컴파일된 클래스로 제공이 되기 때문이에요 미토: 내가 당신 말을 검증을 해봐야겠어. 컴퓨터에 JRE 깔린데 들어가서 미토: 어딨어 안 보이는데? 아 미토: 이 rt.jar 찾아서 압축 푸니까 진짜 다 나오네요 List.class 같은거 얄코: 이것저것 되게 많죠 .class 파일들이 미토: 이 기능들이 다 여기 들어있는 거였구만 얄코: 그래서 이처럼 널리 쓰이는, 그리고 JVM에서 도는 라이브러리들을 얄코: JVM이랑 세트로 묶어다가 다운받아 설치할 수 있도록 한게 얄코: 이 자바 런타임 환경, JRE에요. 미토: 그럼 예전에 윈도우에서 가끔 무슨 프로그램 설치할 때 미토: 자바 필요하다면서 무슨 다방커피잔 뜨고 같이 설치되는게 미토: 이 JRE인거네요? 얄코: 그쵸. 위에서 말했듯 어떤 컴퓨터든 이 JRE만 깔리면 얄코: 자바로 작성한 프로그램을 돌릴 수 있게 되는거죠. 얄코: 이 JRE가 JVM도 포함을 하고 있거든요. 미토: 어떤 컴퓨터에든 인터넷 익스플로러를 깔면 미토: 액티브X를 돌릴 수 있는것처럼요 얄코: 예시를 들어도 재수없게 미토: 근데 왜 요즘 JRE가 눈에 덜 띄는 것 같지? 미토: 여기 지금 오라클 사이트 들어가서 보니까 미토: 자바 11은 JRE는 안 보이고 JDK란 것만 보이는데 미토: 이건 왜 그런거에요? 얄코: 이참에 JDK까지 설명을 하는게 좋겠네요 얄코: JDK는 Java Development Kit 얄코: 말 그대로 자바 개발 도구의 약자인데요 얄코: JRE가 JVM을 포함하는것처럼 JDK도 JRE 얄코: 즉 자바의 런타임때 필요한 요소들도 포함을 해요. 얄코: 거기에 추가해서 JDK에는 개발에 필요한 것들 얄코: 이를테면 자바 코드를 컴파일할때 쓰는 javac 얄코: 자바를 디버깅할 때 쓰는 jdb 얄코: 서로 연관 있는 클래스들을 하나의 JAR 파일로 묶어주는 jar 얄코: 기타 등등, 위키피디아 JDK 항목 보시면 쫙 나와있어요 얄코: 이처럼 최종사용자가 아닌 프로그래머를 위한 기능들도 얄코: 같이 탑재를 하고 있는거죠 미토: 그런데 JRE를 따로 제공을 안 하면 어떡해요? 미토: 일반인들도 개발자 도구까지 다 받아야되나? 미토: 전국민의 개발자화 같은거에요? 얄코: IT환경이 계속 바뀌면서 이런것들도 변화를 해요 얄코: 예전에는 최종 사용자들이 자바 프로그램 돌리려면 얄코: 아까 그 커피 그려진 화면 나오는 JRE를 따로 설치하고 그랬는데 얄코: 사실 이것도 딱히 좋은 그림은 아니잖아요 얄코: 자바 11은 개발자가 배포하는 자바 프로그램에 얄코: JRE랑 JVM 요소들까지 끼워넣어서 얄코: 사용자는 그냥 그 프로그램만 받아서 쓰면 되도록 미는거구요 얄코: (아까 말한 WORA랑은 조금 다를 수 있지만) 얄코: 그리고 자바 돌리는 서버같은 경우 그냥 아예 JDK를 설치해서 얄코: 어차피 용량 크지 않으니까. 그렇게 사용을 하는거죠 미토: 근데 이 JDK도 종류가 되게 여러가지가 있지 않아요? 미토: 뭐 공짜로 쓸 수 있는것도 있고 돈 내야 되는것도 있고 그러던데 얄코: 네, 일단 헛갈려서는 안 되는게 자바란 언어 자체는 무료구요 얄코: 이 자바로 뭘 개발할 때 쓰는 툴인 JDK 중에 얄코: 대표적으로 오라클에서 배포하는 Oracle JDK 등이 얄코: 상업적 이용에 한해서 유료에요. 개인은 공짜로 써도 됩니다 얄코: 무료로 이용하고자 하시는 분들은 같은 오라클의 OpenJDK나 얄코: Azul에서 만든 Zulu, Amazon의 Coretto 등등 얄코: 다른 데서 만든 좋은 무료 버전들도 여럿 있구요 얄코: 최근에는 마이크로소프드도 Open JDK를 출시했죠 얄코: 선택지는 굉장히 다양합니다. 얄코: 이 JDK 배포판에 따라 그에 내장된 JVM도 다를 수 있어요 미토: 유료 버전이랑 무료 버전은 그럼 어떤 차이점이 있는거에요? 미토: 싼게 비지떡이라고 무료인걸로 하면 뭐가 막 안 되고 그러나? 얄코: 회사에서 돈을 받고 제공하는 것들은 아무래도 얄코: 성능이랑 안정성, 최신 기능 등에서 나은 면들이 있죠 얄코: 그래서 큰 업체들에서는 그런 버전들을 많이들 쓸 거구요 얄코: 하지만 Open JDK들도 이를 많이 따라잡은 상태고 얄코: 좋은 것들은 Oracle JDK에 못지 않게 쓸만하다고 해요 얄코: 어지간한 소프트웨어 개발에는 별 문제가 없기 때문에 얄코: 서비스의 규모나 특성에 따라서 적합한 걸 선택하시면 될거에요. 얄코: 자 이렇게 JVM과 JRE, JDK를 알아보는 시간을 가졌는데 얄코: 이것들의 포함 관계를 어떻게 정리를 한 번 해 볼까요? 미토: 자려고 누웠는데 어디서 막 잡음이 들려요 미토: 근데 다음날 코딩을 하려면 잠을 자야되니까 미토: 이런 잡음따위 가볍게 즈려밟고 잠들어주마 하고 자는데 미토: 이 잡음이 계속 겁나 들리니까 자다가 깨버리는거죠 미토: 그래서 JVM - 잡음을 미토: JRE - 즈려밟고 미토: JDK - 자다 깨 미토: 잡음을 즈려밟고 자다 깨 미토: 이렇게 JVM JRE JDK 순서를 외우시면 된다 얄코: 잡음을 즈려밟고 자다 깨 미토: 잡음을 즈려밟고 자다 깨 얄코: 이건 딱히 와 닿거나 웃기는것도 아니고 얄코: 굳이 이렇게까지 외워야하나 싶기도 미토: 너님이 각본 짜놓고 왜 나한테 계속 지랄이세요 얄코: 자, 얄코 라디오 첫 방송 오늘 이렇게 마무리하겠습니다 얄코: 앞으로 얄코라디오에서 다뤄주었으면 하는 얄코: 오늘처럼 가벼운 주제들 있으면 댓글로 남겨주시구요 얄코: 이상 얄코외 미토였습니다. 즐코하세요! 미토: 와, 이걸 시각자료 하나 없이 이렇게 때워버리네 미토: 이거는 뭐 날코야 날코 날로먹는 코딩사전




관련 태그의 다른 영상들

JVM, JRE, JDK가 뭔가요?
자바를 사용하려면 필수! JVM과 JRE, JDK를 확실히 알아봅시다.
# 자바
# JVM
# JRE
# JDK
# JIT
...