상위 문서: Java
1. 개요
프로그래밍 언어 Java의 기타 정보에 관해 다룬 문서이다.2. 이름 유래
처음엔 고슬링 사무실 앞에 있는 참나무에서 따와 OAK로 지었다가 그대로 상표로 등록하기엔 문제가 생겨서[1] 컨설턴트가 극단적인 방법을 도입, 오후에 개발진들을 회의실에 가둬서(...) 브레인스토밍을 시켰다. "기분이 어떤가요"(Excited!), "무엇이 당신 기분을 좋게 만드나요?"(Java coffee!) 같은 연상적인 작용을 거쳐 여러가지 이름을 정하고, 그 중에서 자바 커피의 Java를 선택했다. Java는 랭킹 중 네 번째. 리스트의 첫 번째 이름은 Silk였고 고슬링이 가장 좋아했던 이름은 Lyrics, 세 번째에 올라왔던 이름이라고.개발진이 자바산 커피를 좋아해서 그랬다는 설도 있다.
3. 구글 vs. 오라클: Java 저작권 분쟁
Java를 처음 개발한 썬 마이크로시스템즈는 오라클에게 인수되었고, 2010년에 오라클은 구글이 안드로이드를 개발하면서 Java API 37개의 소스 코드를 무단 복제하여 사용했다는 이유로 소송을 제기했다. 오라클은 구글이 Java를 이용해 OS를 개발하려는 상업적 목적을 가지고 있었으므로 사전에 허가를 받았어야 했다는 주장이고, 구글은 Java API가 저작권이 인정되지 않는 작업물이거나, 저작권자의 허락 없이 이용할 수 있는 공정 이용(Fair Use)의 대상이라며 맞섰다. 그리고 2021년, 장시간에 걸친 소송전은 구글의 승리로 결론났다.재판의 흐름을 정리하자면 이렇다. 2012년에 이루어진 '저작권 유무'에 관한 재판 1심에서는 구글이 승소하였고, 2014년 항소심에서는 오라클이 승소하였으며 2015년에는 구글의 상고가 기각되었다. 이후 2016년 '공정 이용'에 관한 재판 1심에서는 구글 측의 주장이 받아들여지며 구글이 승소했지만, 결국 2018년 항소심에서 다시 오라클이 승소하게 된 것이다. # #
항소심 재판부의 결론은 Java API 역시 저작권이 존재하는 엄연한 저작물이라는 것이다. 재판부는 구글이 Java API를 수정 없이 그대로 긁어다가 안드로이드를 만들어 모바일 OS 시장을 점령하였으며, 단순히 어떤 애플리케이션을 개발한 게 아닌 별도의 운영체제와 플랫폼을 무기로 향후 오라클이 Java를 이용하여 모바일 시장에 진출할 가능성을 꺾어버렸기 때문에 Java의 무단 이용은 불공정한 행위라고 판결했다. 현재 구글이 오라클에게 배상해야 할 금액은 약 90억 달러에 달할 것으로 예상되고 있다.
이 판결이 가져다 줄 여파에 대해 안드로이드 생태계가 큰 위기를 맞이했다는 시각이 있지만, 사실 소송기간 동안 안드로이드는 이미 모바일 OS 시장을 iOS와 함께 5:5로 양분하고 있을 만큼 거대하게 성장했기 때문에 이번 일로 안드로이드가 휘청거릴 일은 단연코 없다. 90억 달러가 작은 돈은 아니지만, 구글은 한창 성장하던 시절인 2006년에 이미 유튜브 인수금액으로 16억 5,000만 달러를 한번에 지불해낼 정도였고, 2007년에는 광고 회사인 더블클릭을 31억 달러에 샀을 정도로 현금 창출력이 상당한 기업이다. 그리고 안드로이드는 직접적인 로열티 수입은 없지만 구글 검색과 광고, 구글 플레이와 유튜브 같은 구글 앱에서 나오는 수익만 해도 매년 수백억 달러에 달한다는 평가를 받고 있는데, 모바일 OS 시장 양분 댓가로 90억 달러를 낸다면 구글 입장에선 거저 먹는 것이나 다름없다.
일단 구글은 연방대법원에 상고할 것이라는 의사를 밝혔다. # 다만 실제로 상고를 신청할지, 신청하더라도 대법원에서 그걸 받아들일지는 나중 문제이다.
구글이 대법원에 오라클의 승소에 대해 다시 검토해줄 것을 요청했고 이와 관련한 첫번째 심리가 오는 2020년 3월 열릴 예정이라고 한다. 최종 판결은 이르면 6월께 나올 것이라고 한다. #
하지만 2020년을 강타한 COVID-19의 여파로 2020년도에 예정된 재판들이 줄줄이 2021년도로 연기되면서 첫 변론도 3월에서 9월로 밀렸다. # #
2021년 4월, 연방대법원은 구글이 Java API를 공정한 관행에 따라 이용했기 때문에 저작권을 침해한 것이 아니라 판단, 10여년 만에 구글의 승소로 해당 분쟁이 종결되었다. # 판결문(영문)# 다만 연방대법원은 Java API의 저작물 여부에 대해서 구체적으로 판단하지 않고 저작물이라고 가정하고 넘어갔기 때문에 또다른 분쟁의 여지를 남기게 되었다. #
4. 점유율
세계 프로그래밍 언어 중 2000년부터 무려 19년 동안 점유율 1위를 질주한 존재였다. 2007년까지만 해도 전 세계 프로그래밍 언어 점유율 중에 Java 점유율이 35%까지도 차지했다. 얼마나 많이 썼으면 Java 업데이트 창에서 '30억개 기기에서 Java 사용'이라고 광고할 정도. 그러나 2010년대 들어서 Python, C++ 등의 점유율이 급상승하면서 Java의 점유율은 점차 하락하는 추세이다. 1위는 수성하고 있지만 점유율은 급격하게 떨어지고 있다. 2019년까지는 C언어보다 약간 더 많은 수준으로 17~18% 정도를 차지하고 있다. Java 점유율이 하락한 만큼 Python 비율이 크게 올랐다. 하지만 결국 2020년에 C언어와 Python에 줄줄이 사용량 순위에서 추월당했다. 2021년까지도 Top 5를 지키고는 있지만 일단 1위에서는 내려왔다.5. 사업 재편
이러한 분쟁과는 별도로, 오라클이 Java를 포기하려고 한다는 주장이 있다. "Oracle Mysteriously Fires Almost All of Its Top Java Evangelists"(Softpedia News) 자바 에반젤리스트, 오라클 퇴사의 변 "자바 구하려"(ZDNet Korea)자바 에반젤리스트는 Java의 전체적인 업계 내에서의 분위기를 결정지을 수 있는, 비교하자면 리눅스계의 리누스 토르발스 같은 사람들인데, 오라클이 이 사람들을 꾸준히 해고하고 있다는 것이다. 장사를 독하게 하기로 유명한 오라클인지라, Java 자체가 지금은 물론이고 미래에도 그다지 수익성이 좋다고 할 수 없기에 망설임 없이 포기하려는 것이 아니냐라는 관측이 있다. 제임스 고슬링도 한마디 했다.
다만 이 부분은 사람에 따라 극단적으로 반응할 수도 있는 문제이므로[2] 업계 분위기에 대한 판단은 스스로 하도록 하자. 위에서도 언급했지만 Oracle JDK를 유료로 전환한 걸 보면 포기할 생각은 없는 듯하다.
2017년 8월 17일, 오라클이 Java EE를 포기한다고 발표했다. 오픈오피스, 넷빈즈 때와 같이 오픈 소스 커뮤니티로 보내려 하고 있으며, 아파치 소프트웨어 재단과 이클립스 재단이 Java EE를 넘겨받을 유력한 후보로 알려져 있다. Opening Up Java EE 결국 이클립스 재단이 맡는 것으로 확정되었으며, Java EE의 오픈 소스화를 위한 9개 프로젝트를 추진한다고 밝혔다. # # 다만 오라클이 Java EE라는 상표권까지 넘긴 것은 아니기 때문에, 새로운 이름을 공모하였고 이후 자카르타 EE(Jakarta EE)라는 새 명칭이 결정되었다. 엔터프라이즈 자바의 새 이름 ‘자카르타 EE'[3]
2019년 9월 10일, 자카르타 EE 8이 정식 출시되면서 썬이 Java의 오픈소스화를 선언한지 13년만에 Java의 모든 구성요소가 오픈소스화 되었다.
6. 도서
서점에 가면 Java 프로그래밍 책이 무궁무진하게 많다. Python, Java, C, SQL 4개는 서점에 가면 프로그래밍 언어 분야에 별도의 카테고리를 차지하고 있다.7. 여담
- Java의 창시자인 제임스 고슬링 옹은 진성 앱등이다.[4] 집에서 쓰는 IT 기기에 대해 묻는 질문에 폰, 태블릿, 데스크탑, 랩탑 등 거의 모든 IT 기기를 애플사 제품으로 도배해놨음이 밝혀졌다. 가족들도 마찬가지. 정작 애플은 OS X 레오파드 업데이트 때 Java를 찬밥 취급했지만...[5]
- 제임스 고슬링과 Java를 창시할 때 같이 일했던 패트릭 노튼은 1999년 FBI의 아동포르노 함정수사로 인해 체포되었다.[6] 덤으로 IT 관계자들은 노튼이 기업 방화벽을 통과할 수 있는 통신도구를 만드는 일에 관심을 보인 이유를 일찌감치 짐작했었다고...
- 헷갈리기 쉬운 것들
-
자바스크립트(JavaScript)
JavaScript는 Java와는 아무 상관도 없다. 넷스케이프사에서 Mocha, LiveScript로 개발하던 스크립트 언어를 1996년 전후 열풍이던 Java의 유명세에 묻어가기 위해 Sun에서 상표권을 라이선스해 JavaScript라고 이름붙였을 뿐이다. 이름 하나 생각없이 잘못 붙여서 여러 사람을 지금도 헷갈리게 만드는 대표적인 케이스.
이름을 제외한 연관성은 희박한 편이여서 공통점이 아닌 차이점을 나열하는게 훨씬 빠를 정도다. 같은 C-족 언어이긴 하지만 문법조차 별로 비슷하지도 않으며[7], 사용되는 라이브러리나 개념 또한 많이 다르다. 기초 패러다임상 당연한 요소들을 제외하고 나면 둘의 유사점은 오직 객체지향 뿐인데 그 마저도 JavaScript는 프로토타입 베이스라 클래스를 쓰는 Java와 많이 다르다 [ES6]. 또한 Java는 정적 타입 언어인데 반해 JavaScript는 동적 타입 언어다. 웹 서버용 파생 규격 역시 JSP와 Node.js로 다르다.
떠도는 말로 'Java와 JavaScript의 차이는 인도와 인도네시아의 차이와 같다'라고도 한다. 왜냐하면 인도와 인도네시아가 이름만 비슷하고 서로 다른 국가이듯이[9] Java와 JavaScript도 다른 프로그래밍 언어이기 때문이다. 굳이 유일한 공통점을 뽑자면, Java 와 JavaScript 라는 단어는 모두 오라클의 등록 상표이다. 이 뿐이다.
Java 언어 스펙은 오라클이 지금도 간섭할 수 있지만, JavaScript 오라클이 간섭하지 않기로 했다. 즉, 단어 사용의 권리 말고는 공통점이 하나도 없는 언어라 보면 된다. -
Visual J++/Visual J#
Visual J++은 마이크로소프트에서 Java를 변형하여 윈도우 전용으로 만든 언어. 위의 JavaScript는 이름이 다른거지만 이건 Java 자체를 윈도우에 맞도록 변형한 것이다. 이 때문에 Java 가상머신 없이 윈도우에서 네이티브로 돌아가지만, 다른 플랫폼에서는 전혀 돌아가지 않는다. 거기다 썬 마이크로시스템즈의 허락없이 마구 변형해서 썼기 때문에 소송크리를 먹고 개발이 중단되었다.
이후 윈도우의 프로그램이 닷넷으로 넘어가면서 닷넷 기반의 Visual J#도 만들었다. Visual Studio 2005에 포함되었지만 이것도 개발이 중단되었다. 이때는 썬이 소송하지도 않았는데 중단된 것을 보면 시장성이 없었던 듯 하다. 이미 이 때는 C#이 어느 정도 자리를 잡았기 때문일 수도 있다.
- 조엘온 블로그로 유명한 조엘이 엄청나게 싫어하는 언어. 조엘 스폴스키가 Java를 싫어하는 이유로는 성능상의 문제나 저수준을 다루지 않기때문이다. ...)[10][11]는 이유도 있지만, Java 자체가 "위원회 기술"이라는 이유도 큰 몫을 차지한다.[12] 사실 이는 Java가 가진 태생적 문제인데 Java라는 언어가 C#처럼 어느 특정 단체나 회사가 주도적으로 끌고가는 물건이 아니다 보니 위원회를 구성하는 각 기업들의 파워게임에 따라 중요한 문제의 해결방안이 빨리 처리되지 않는 경우도 있고 배가 산으로 가는 경우도 있다.
- Java를 설치하고 환경변수를 설정할 때 CLASSPATH의 디렉토리를 보통 %JAVA_HOME%\\lib로 설정하는데, 이렇게 하면 파일 실행 시 JVM이 무조건 \\lib 경로에서 클래스 파일을 찾기 때문에 해당 파일을 찾거나 로드할 수 없다는 오류 메시지를 뿜게 된다. 매번 실행할 때마다 -classpath . 옵션을 주거나 CLASSPATH 환경변수의 디렉토리 끝에 ;.을 붙이면 해결할 수 있다.[13] 물론 대부분의 IDE는 클래스 패스 설정을 자동으로 처리해 주지만, 역으로 그렇기에 클래스 패스에 대한 이해를 제대로 하지 않고 넘어가 버리는 경우가 많다.
-
Java 클래스 바이트코드 매직넘버가
0xCA 0xFE 0xBA 0xBE
다. 이것을 붙이면 CAFEBABE다. CAFEBABE인 이유는, 제임스 고슬링과 다른 연구원들이 St. Michael's Alley라는 곳에 점심을 먹으러 가곤 했다고 한다. 그 지방 전설에 의하면 그곳에서 더 그레이트풀 데드라는 밴드가 크게 성장하기 전에 연주하던 곳이라고 했다. 그리고 제임스 고슬링과 연구원들은 그곳을 Cafe Dead라고 불렀다. 그러다 CAFE DEAD가 헥스 넘버인 것을 알아냈다고 한다.[14] 그 때 마침 그는 파일 포맷 소스와 매직넘버를 개편하고 있었다.[15] 결국 Object 파일의 매직 넘버는 CAFEDEAD가 되었다. 나머지 하나, 클래스 파일의 매직넘버는 CAFE 다음에 맞을 만한 번호를 정하는 것인데, 그 때 적은 것이 BABE다.
- 2012년 말에는 Java에 보안 취약점이 발견되어 오라클에서 긴급 보안 패치를 발표했지만 또 다른 취약점이 발견돼버리는 바람에 Java를 계속 써야 하나 말아야 하는 논쟁이 벌어지기도 했다. 지금은 잠잠해진 상태.
- 기존의 32bit용은 64bit 웹 브라우저에 사용할 수 없기에 64bit용 Java가 공개되어 있다. 그러나 32bit 웹 브라우저와 64bit 웹 브라우저를 각각 돌아가며 사용해야 할 필요가 있을 경우 둘 다 설치해야 제대로 돌아가기 때문에 번거로운 편이다.
- 2018년 초부터 자바 설치파일로 위장한 랜섬웨어가 기승을 부리고 있다. 어느날 갑자기 직접 설치파일을 다운받거나 하지도 않았는데 설치파일이 저절로 실행되며, 대부분의 감염자들은 이를 자동 업데이트로 인지하고 그대로 업데이트 해버려서 감염된다고 한다. 심지어 사용하는 운영체제의 언어를 인지하여 해당 언어의 자바 설치파일에 있는 문장과 이미지까지 철저하게 재현되어서 의심할 여지가 없다고 한다.
- 그 유명한 마인크래프트는 Java를 이용해서 개발되었다.(!) 그러나 노치의 요즘 프로그램엔 잘 맞지 않은, 옛날 프로그래밍 실력으로 인한 속도 문제 때문인지 게임을 통째로 C++로 다시 짰다. 그리고 실제로 속도가 10배 가까이 빨라졌다. 다만 기존의 Java 에디션으로 개발된 애드온들이 워낙 많고, 그것들이 베드락 에디션과 호환이 안 돼서 여전히 Java 에디션을 사용하는 유저들이 많다. 실제로 Java는 게임 쪽에서는 거의 쓰이지 않는다.[16]
- 미국의 고등학교 교육과정 겸 시험 및 대학 교양 과목 선이수제인 Advanced Placement 중 AP 컴퓨터과학 A 과목이 Java를 사용한다.
- 온라인 상으로 코드를 실행시켜 보고 싶다면 여기로.
-
자바를 컴퓨터에 깔 때 설치 프로그램에서 '30억개 기기에서 Java 사용'이라는 문구가 나온 적이 있다.
- Java Processor라고 하여 자바 가상 머신을 하드웨어로 구현하려는 시도를 한 적도 있다.
-
3D 웹게임을 개발할때 쓰이기도 했다.
[1]
일반명사나 이미 널리 알려진 표현 등은 상표로 등록 못한다. 물론 상표 등록을 못해도 제품이나 서비스 이름으로 못 쓰는 건 아니지만 해당 이름에 대해 배타적·독점적 권리를 확보하지 못한 상태가 돼서, 남들이 따라 해도 거기에 법적으로 태클을 걸 수가 없다.
[2]
각 언어 프로그래머들의 자신의 언어에 대한 자부심은 가히 종교의 신앙과 비견할 만한 것이다.
[3]
원래
아파치 소프트웨어 재단이 '자카르타'라는 이름의 Java 오픈 소스 프로젝트(현재는 종료)를 소유하고 있었으나, 해당 명칭을 사용해도 된다고 허가하였다.
[4]
Java가
안드로이드의 기반이 되는 언어라는 점을 생각하면 아이러니...
[5]
사실 애플은 독자적인 JDK를 제공하는지라 Java 개발자들을 매우 피곤하게 하는 회사이기도 하다.
[6]
단지 징역을 살지는 않고 FBI에서 1년 근무하는 것으로 퉁쳤다.
[7]
기초적인 C-문법의 일부인 if문, while문 등을 제외하면 공통점이 많지 않다.
[ES6]
ECMAScript 6에서 Class가 생겼다! 그래도 여전히 Java의 클래스와는 겉보기에만 비슷할 뿐 열어보면 다르다. ES6에서 나온 클래스는 기존에 있던 prototype 객체지향 프로그래밍을 조금 더 쉽게 하게 해주는 문법적 설탕이다.
[9]
다만 인도네시아의 어원은 인도와 관련이 있다. 인도네시아라는 이름은 '
인도양의 섬'들이라는
그리스어·
라틴어식 표현이기 때문. 이런 인도네시아와 인도의 관계는, JavaScript가 Java와 별 관련은 없어도 그 이름을 빌려 왔다는 점에서 왠지 흡사하다.
[10]
https://www.reddit.com/r/learnprogramming/comments/3uhdtr/i_just_read_joel_spolskys_the_perils_of_java/
[11]
이 부분은 대학의 교육용 언어로서의 이야기다. 산업용으로서는 같은 기능을 개발하기 위한 언어는 쉬우면 쉬울수록 좋은 것이 당연하다. 물론 성능과 생산성 사이에서 적절한 균형을 잡아야 하겠지만.
[12]
Java 상임 위원회에는
인텔,
오라클,
JetBrains,
레드햇,
ARM Holdings 등이 속해 있다. 모두 각자의 분야에서 내로라하는 기업들이다.
[13]
'.'은 Java 클래스 파일이 위치한 해당 디렉토리를 의미한다.
[14]
CAFEDEAD를 0xCA 0xFE 0xDE 0xAD로 바꿨을 때의 얘기인 듯하다.
[15]
그때 필요한 매직넘버는 2개였다. 하나는 오브젝트 파일이고, 또 다른 하나는 클래스 파일 매직넘버였다.
[16]
보통 C++가 많이 쓰이고, 유니티 엔진의 영향으로 C#도 많이 쓰는 편이다. 웹게임에서 Java를 쓴적이 있지만 서버 사이드에서나 쓰는 정도였고, 클라이언트 사이드는 플래시가 대세였다. 플래시가 몰락한 후에는 HTML5로 물갈이 당했고, 웹게임 자체가 쇠퇴기에 들어서서 잘 쓰이지 않는다.