Community

๐Ÿ’ฌ 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 ๊ฐ€ ์ธ๊ธฐ์žˆ๋Š” ์–ธ์–ด๋กœ ์†๊ผฝํžˆ๋Š”๊ฒŒ ์•„๋‹๊นŒ ์‹ถ๋‹ค.

์•Œ๋ฆผ

์•Œ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค