๐ฌ Programming ์ธ์ด๊ฐ ์ ๋ฃํ๊ฐ ๋๋ค๊ณ ? ํ๋ก์ ํธ๋ฅผ Java ์ธ์ด๋ก ์งํํ๊ณ ์๊ฑฐ๋ ์ด๋ฏธ ์ด์์ค์ธ ์ฌ๋๋ค ์ ์ฅ์์๋ ์ฒ์ Java ์ ๋ฃํ ๋ผ๋ ๋ง์ ๋ค์์ ๋ ํ! ํ ์๋ฐ์ ์์ ๊ฒ์ด๋ค.
๐ฌ Programming ์ธ์ด๊ฐ ์ ๋ฃํ๊ฐ ๋๋ค๊ณ ? ํ๋ก์ ํธ๋ฅผ Java ์ธ์ด๋ก ์งํํ๊ณ ์๊ฑฐ๋ ์ด๋ฏธ ์ด์์ค์ธ ์ฌ๋๋ค ์ ์ฅ์์๋ ์ฒ์ Java ์ ๋ฃํ ๋ผ๋ ๋ง์ ๋ค์์ ๋ ํ! ํ ์๋ฐ์ ์์ ๊ฒ์ด๋ค. ๊ทธ๋งํผ Java ๋ ์ธ๊ธฐ์๋ ์ธ์ด์ด๊ณ ๋์ฒดํ๊ธฐ ์ํด์๋ ๋ง์ ๋ฆฌ์์ค๋ฅผ ํฌ์ํ ์ ๋ฐ์ ์๋ค. ๊ฒฐ๋ก ๋ถํฐ ์๊ธฐํ์๋ฉด Java ๋ผ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์์ฒด๋ GPL ๋ผ์ด์ผ์ค๋ก ๋ฌด๋ฃ์ด๋ค. ๊ทธ๋ผ ๋๋์ฒด ์ด๋ค๊ฒ์ด ์ ๋ฃํ๊ฐ ๋๋ค๋ ๋ง์ผ๊น? Java ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์ํด์๋ ์๋์ 2๊ฐ์ง ํต์ฌ ๊ธฐ๋ฅ์ด ํ์ํ๋ค - Java ๋ก ์์ฑํ ํ๋ก๊ทธ๋จ์ ์ปดํ์ผ ํด์ฃผ๋ JDK - ์ปดํ์ผ๋ ๊ฒฐ๊ณผ๋ฌผ์ ์คํ์์ผ์ฃผ๋ JVM JDK ์ JVM ์ด ๊ฐ์ด ํจํค์ง๋์ด ๋ฐฐํฌ๋๋ ๊ตฌ์กฐ๋ผ ํํ๋ค JDK, JVM ์ ํฉ์ณ JDK ๋ผ ๋ถ๋ฅด๋๋ฐ ์ด JDK ๊ฐ ์ ๋ฃํ ๋๋๊ฒ์ด๋ค. ์ฆ, ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก์จ Java ๋ฅผ ์ฌ์ฉํ๋๊ฑด ๋ฌด๋ฃ์ด์ง๋ง ์ด๋ฅผ ์คํ์ํค๊ธฐ์ํ ์ปดํ์ผ๊ณผ ์คํ ๋จธ์ ์ด ์ ๋ฃ๋ผ๋ ๊ฒ์ด๋ค. JDK ๋ ํฌ๊ฒ OracleJDK ์ OpenJDK ๋ก ๋๋์ด์ง๋๋ฐ ์ด์ค OracleJDK ๊ฐ ์ ๋ฃํ ์ ์ฑ ์ ํผ์น๊ณ ์๋ค. ๐ฌ OracleJDK ์ฐ๋ฉด ๋ฌด์กฐ๊ฑด ๋๋ด์ผํด์? OracleJDK๋ BCL(Oracle Binary Code License) ์ด๋ผ๋ ๋ผ์ด์ผ์ค๋ฅผ ์ ์ฉํ๊ณ ์๋๋ฐ BCL ๋ผ์ด์ผ์ค์์๋ ์ผ๋ฐ์ ์ธ ๋ชฉ์ ์ ์ปดํจํ (General Purpose Computing)์ ์ฌ์ฉ์์๋ง ๋ฌด๋ฃ๋ผ๊ณ ๋ฐํ๊ณ ์๋ค. ์ฌ๊ธฐ์ ๋งํ๋ ์ผ๋ฐ์ ์ธ ๋ชฉ์ ์ ์ปดํจํ ์ด๋ ๋ฐ์คํฌํ, ๋ ธํธ๋ถ, ์ค๋งํธํฐ, ํํ๋ฆฟ ๋ฑ์์์ ์ฌ์ฉ์ธ ๊ฒ์ธ๋ฐ ์ฆ, ๊ฐ์ธ์ด ํ์ต์ด๋ ํ ์คํธ ๋ชฉ์ ์ผ๋ก ๊ฐ์ธ์ ๋๋ฐ์ด์ค์ ์ฌ์ฉํ๋๊ฑด ๋ฌธ์ ๊ฐ ์๋ค๋ ๋ง์ด๋ค. ๋ฐ๋๋ก ํน์ ๊ธฐ๋ฅ๋ง์ ์ํด ์๋ํ๋ ์์คํ ๋ฐ ์๋ฃจ์ ์์ ์ฌ์ฉํ๋๊ฒ์ ์ผ๋ฐ์ ์ด์ง ์์ ๋ชฉ์ ์ ์ปดํจํ ์ด๋ผ ๊ท์ ํ๊ณ ์๋๋ฐ ์ด ํํ์ด ๋ชจํธํ์ฌ ๋๋ถ๋ถ์ ์์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ํ์ฌ์ ๊ฒฝ์ฐ ๋ผ์ด์ผ์ค ๋น์ฉ์ ์ง๋ถํ๋ค๊ณ ์๊ฐํ๋๊ฒ ์ข๋ค. ๊ทธ๋ ์ง๋ง ๋ชจ๋ OracleJDK ๊ฐ ์ ๋ฃ์ธ๊ฒ์ ์๋๊ณ 2019๋ 01์ 15์ผ์ ๊ณต๊ฐ๋ JDK 8u202 ๋ฒ์ ๊น์ง๋ ๋ฌด๋ฃ๋ก ์ ๊ณตํด์ฃผ๊ณ ์๋ค. ๐ฌ OpenJDK ๋ ์ ๋ฃํ ์๋๋์? OpenJDK ๋ JDK(Java SE) ์ ์คํ์์ค ๊ตฌํ์ฒด๋ก GPL v2 with the Classpath Exception ๋ผ์ด์ผ์ค๊ฐ ์ ์ฉ๋์ด ๋ฌด๋ฃ์ด๋ค. ๋ง์ ์์ ๋ฒค๋๋ค์ด ๊ตฌํ์ฒด ๊ฐ๋ฐ์ ์ฐธ์ฌํ์ฌ ๋ค์ํ ์ข ๋ฅ์ OpenJDK ๊ฐ ์กด์ฌํ๊ณ ๋ฌด๋ฃ๋ก ๋ฐฐํฌ๋๊ณ ์๋ค. ๐ฌ OpenJDK ๋ OracleJDK ๋ณด๋ค ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค? Jave SE 6 ๋ฒ์ ์ OpenJDK๋ ๋ฐฑํฌํธ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋์ด ์ฑ๋ฅ ์ ํ ์ด์๊ฐ ์กด์ฌํ์๋ค. ์ด๋ก์ธํด OpenJDK ๊ฐ OracleJDK ์ ๋นํด ์ฑ๋ฅ์ด ๋จ์ด์ง๊ฒ์ด๋ผ๋ ์ธ์์ด ์๊ฒผ๋๋ฐ Java SE 7๋ถํฐ ๋ชจ๋ JDK๋ OpenJDK ๋ ํผ๋ฐ์ค ์์ค ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ์๋๋๋ก ๋ณ๊ฒฝ๋์ด ๋ JDK ๊ฐ์ ์ฑ๋ฅ์ฐจ์ด๊ฐ ๊ฑฐ์ ์์ด์ก๋ค. ๋ํ ์ค๋ผํด์ด ์๋ ์๋ํํฐ ์ ์ฒด๊ฐ OpenJDK๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ณต์ธ๋ JDK๋ฅผ ์ ์ํ์ฌ ๋ฐฐํฌํ๋ ค๋ฉด ์ค๋ผํด์ ์๊ฒฉํ TCK ์ธ์ฆ์ ํต๊ณผํด์ผ ํ๋ค. ์๋ง๊ฐ์ง์ ํ ์คํธ๋ฅผ ๋จ ํ๋๋ผ๋ ํต๊ณผํ์ง ๋ชปํ๋ฉด ์ธ์ฆ๋์ง ์๋๋ค. ์ด๋ฌํ ํ๋ก์ธ์ค๋ก ์ธํด OpenJDK ๊ฐ OracleJDK ๋ณด๋ค ์ด์๋ ํธ๋ฌ๋ธ์ด ๋ฐ์ํ ์ผ์ ์์ด์ก๋ค. ๐ฌ ๊ทธ๋ฌ๋ฉด ๋ฌด์กฐ๊ฑด OpenJDK ์ฐ๋ฉด ๋๋๊ฑฐ ์๋๊ฐ์? ์ผ๋ฐ์ ์ธ ์๋ฒ ์ดํ๋ฆฌ์ผ์ด์ ์ด๋ ์คํ์์ค ์๋ฃจ์ ์ OpenJDK ๋ก ์ด์์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๊ตณ์ด OracleJDK ๋ฅผ ์ธ ํ์๋ ์๋ค. ํ์ง๋ง ๊ธ๊ผด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Java Web Start ์ ๊ฐ์ด Oracle์ด ์ฌ์ฐ๊ถ์ ๋ณด์ ํ๊ณ ์๋ ํ๋ฌ๊ทธ์ธ ๊ธฐ๋ฅ์ ์จ์ผํ๋ ๊ฒฝ์ฐ OpenJDK ์๋ ํด๋น ํ๋ฌ๊ทธ์ธ์ด ์ ๊ณต๋์ง ์๊ธฐ ๋๋ฌธ์ ์ธ ์ ์๋ค. ๐ฌ ๋ง๋ฌด๋ฆฌ ์ด ๋ ผ๋์ด ๋ฐ์ํ๊ฑด ๊ฝค ์ค๋์ ์ผ์ด์ง๋ง ์์ง๋ ์์ธํ ์์ง ๋ชปํ๋ ์ฌ๋๋ค์ด ์๋๊ฒ ๊ฐ์ ์์ธํ ์ ๋ฆฌ๋ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ ๋ฆฌํด๋ณด์๋ค. ์ด ๋ ผ๋์ด ํ์ฐฝ ์งํ๋ ๋๋ JDK ๋ฅผ ์ ๋ฃํํ๋ ์ค๋ผํด์ ๋จ์ํ ๋ฏธ์(?)ํ์ง๋ง ์ง๊ธ ์๊ฐํด๋ณด๋ฉด OracleJDK ๋ฅผ ํตํด ์์ต๊ตฌ์กฐ๋ฅผ ๋ง๋ค์์ง๋ง ๋์์ OpenJDK ์ ๋ํ ์ด์๋ ์ฃผ์ฒด๊ฐ ๋์ด ๊ณต์กด์ํด์ผ๋ก์จ Java ์ ๋ฐ์ ์ ํฌ๊ฒ ์ํํ์ง ์๋ ์ ์์ ๋๋ฆ ๋๋ํ๊ฒ ์์ต๊ตฌ์กฐ๋ฅผ ๋ง๋ ๊ฒ๊ฐ๋ค๋ ์๊ฐ์ด ๋ ๋ค. ์ด๋ฐ ๋๋ํ ์ ๋ต์ด ์์๊ธฐ์ ์ค๋๋ ์๋ Java ๊ฐ ์ธ๊ธฐ์๋ ์ธ์ด๋ก ์๊ผฝํ๋๊ฒ ์๋๊น ์ถ๋ค.