๊ฐœ๋ฐœ ์ผ์ง€ ๐Ÿ’ป/๊ธฐํƒ€

IntelliJ ์ฝ˜์†” ์ฐฝ ํ•œ๊ธ€ ๊นจ์ง ํ˜„์ƒ์˜ ์›์ธ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

interfacer_han 2026. 7. 3. 23:54

#1 ์™œ ๊นจ์ง€๋Š”๊ฐ€?

#1-1 ๋ฐฐ๊ฒฝ ์ง€์‹

VM์ด println("๋€จ") ๋ผ๋Š” ์ฝ”๋“œ๋ฅผ ๋งˆ์ฃผ์ณค๋‹ค. (์ •ํ™•ํžˆ๋Š”, ์ €๋Ÿฐ .java ์ฝ”๋“œ ํ˜•ํƒœ๊ฐ€ ์•„๋‹Œ .class ์ฝ”๋“œ ํ˜•ํƒœ์˜ print๋ฌธ ์ผ ๊ฒƒ์ด๋‹ค) 

[UTF-8๋กœ ์ธ์ฝ”๋”ฉ] "๋€จ" → EB 80 A8 (ํฌ๊ธฐ: 3๋ฐ”์ดํŠธ)
[CP949๋กœ ์ธ์ฝ”๋”ฉ] "๋€จ" → B2 F3 (ํฌ๊ธฐ: 2๋ฐ”์ดํŠธ)

ํ˜น์‹œ๋ผ๋„ ํ—ท๊ฐˆ๋ฆด๊นŒ๋ด ์—ฌ๋‹ด๋ถ€ํ„ฐ ๊บผ๋‚ด๋Š” ๊ฒŒ ์ข€ ๊ทธ๋ ‡์ง€๋งŒ, "์ธ์ฝ”๋”ฉ"์€ ์ปดํŒŒ์ผ ์‹œ์ ์—์„œ ์ผ์–ด๋‚˜๋Š” ์ผ์ด ์•„๋‹ˆ๋‹ค. ์• ์ดˆ์— VM์€ ์ด๋ฏธ ์ปดํŒŒ์ผ๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ์—ญํ• ์ด๋ฏ€๋กœ, "VM์ด ์ธ์ฝ”๋”ฉ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค"๋Š” ์ผ์€ ์ปดํŒŒ์ผ ์ดํ›„(= ๋Ÿฐํƒ€์ž„)์— ์ผ์–ด๋‚˜๋Š” ์ผ์ด์–ด์•ผ๋งŒ ํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด "์ธ์ฝ”๋”ฉ"์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

 "์ธ์ฝ”๋”ฉ"์ด๋ž€, Java VM์ด .class ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋‹ค๊ฐ€ ์ฝ˜์†”์— ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•˜๊ฑฐ๋‚˜ ํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” ๋“ฑ "๋ญ”๊ฐˆ ํ‘œํ˜„ใ†๋‚ด๋ณด๋‚ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ"์—์„œ ํ•ด๋‹น ์ •๋ณด๋ฅผ ํŠน์ • ๊ทœ์น™์— ๋”ฐ๋ผ ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋Ÿฐํƒ€์ž„(์‹คํ–‰ ์ค‘) ์ž‘์—…์ด๋‹ค.

์ž์—ฐ์–ด๋กœ ์†Œํ†ตํ•˜๋Š” ์‚ฌ๋žŒ๊ณผ ๋‹ฌ๋ฆฌ, ์ปดํ“จํ„ฐ๋ผ๋ฆฌ๋Š” ์ •๋ณด๋ฅผ ์ด์ง„์ˆ˜๋กœ ์ฃผ๊ณ  ๋ฐ›๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ์ •๋ณด๋ฅผ ๋ณด๋‚ด๊ธฐ ์ „์— ์ด์ง„์ˆ˜๋กœ ๋ณ€ํ™˜์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
 
๊ทธ๋ ‡๋‹ค๋ฉด ๋ฐ›๋Š” ์ชฝ์—์„œ๋„ ์ € ์ •๋ณด๋ฅผ ํ•ด์„ํ•˜๊ธฐ ์œ„ํ•ด ์—ญ๋ณ€ํ™˜์„ ํ•ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค. ์ด๊ฒƒ์„ ๋””์ฝ”๋”ฉ์ด๋ผ ํ•œ๋‹ค. ์ธ์ฝ”๋”ฉ๊ณผ ๋””์ฝ”๋”ฉ์—์„œ ์„œ๋กœ ๊ฐ™์€ ๊ทœ์น™์„ ์จ์•ผ ์ œ๋Œ€๋กœ ๋œ ์ •๋ณด๊ฐ€ ํŠ€์–ด๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค.
 

#1-2 ์ด์œ 

Mac์ด๋‚˜ Linux์—์„œ๋Š” ํ•œ๊ธ€ ๊นจ์ง์ด ํ”ํ•˜์ง€ ์•Š๋‹ค. ํ•œ๊ธ€์ด ๊นจ์ง€๋Š” ์šด์˜์ฒด์ œ๋Š” ๋Œ€๋ถ€๋ถ„ Windows๋‹ค. ์™œ ๊ทธ๋Ÿด๊นŒ?
 
์ •๋ณด๋ฅผ ์ฃผ๋Š” ์ชฝ = JVM ์ชฝ = Java/Kotlin ์ชฝ์€ ๋น„๊ต์  ์ตœ๊ทผ(2010๋…„๋Œ€ ํ›„๋ฐ˜~)์— "๊ธฐ๋ณธ๊ฐ’์„ (๋ฒ”์šฉ์  ๊ทœ์น™์ธ) UTF-8๋กœ ํ†ต์ผํ•˜์ž"๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฅผ ๋‹จํ–‰ํ–ˆ๋‹ค. ์ตœ์‹  JDK๋Š” ํ”Œ๋žซํผ ์ƒ๊ด€์—†์ด UTF-8์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋ฐ€์–ด๋ถ™์ธ๋‹ค.
 
๋ฐ˜๋ฉด, ์ •๋ณด๋ฅผ ๋ฐ›๋Š” ์ชฝ = Windows ์ฝ˜์†” ์ชฝ์€ 1980 ~ 90๋…„๋Œ€ MS-DOS ์‹œ์ ˆ๋ถ€ํ„ฐ ์ด์–ด์ ธ ์˜จ ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์„ ์—ฌ์ „ํžˆ ์œ ์ง€ํ•œ๋‹ค. ๋‹น์‹œ์—” Unicode / UTF-8์ด๋ผ๋Š” ๊ฐœ๋… ์ž์ฒด๊ฐ€ ์—†์—ˆ๊ณ , ๊ฐ ๋‚˜๋ผ ๋ณ„๋กœ ์ฝ”๋“œ ํŽ˜์ด์ง€(ํ•œ๊ตญ์€ 949)๋ฅผ ๋”ฐ๋กœ ์ •ํ•ด์„œ ์จ์™”๋‹ค. Windows๋Š” ์˜›๋‚  ํ”„๋กœ๊ทธ๋žจ๋“ค๊ณผ์˜ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์ง€๊ธˆ๊นŒ์ง€๋„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด, ์ธ์ฝ”๋”ฉใ†๋””์ฝ”๋”ฉ ๊ทœ์น™์„ ์—ฌ์ „ํžˆ ์ง€์—ญ๋ณ„ ๋ ˆ๊ฑฐ์‹œ ๊ฐ’์œผ๋กœ ์œ ์ง€ํ•œ๋‹ค.
 
๊ทธ๋ ‡๋‹ค. ํ•˜์œ„ ํ˜ธํ™˜์„ฑ ๋•Œ๋ฌธ์— ๊ทœ์น™ ์ตœ์‹ ํ™”๋ฅผ ํ•˜์ง€ ์•Š์€ ๊ฒƒ์ด๋‹ค. Windows ๋‚˜๋ฆ„๋Œ€๋กœ์˜ Trade-Off ์˜€์„๊นŒ? (#2-3์—์„œ Windows๊ฐ€ ์™œ ์ด๋Ÿฐ Trade-Off๋ฅผ ํ–ˆ๋Š”์ง€ ์กฐ๊ธˆ์€ ์ดํ•ดํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค!)
 

#2 ํ•ด๊ฒฐ

#2-1 ๋ฐฉ๋ฒ• 1: ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ด์šฉ

key: JAVA_TOOL_OPTIONS
value: -Dfile.encoding=UTF-8 -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8

์œ„์™€ ๊ฐ™์€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. JAVA_TOOL_OPTIONS์€ JAVA_HOME์ฒ˜๋Ÿผ, JVM ์ž์ฒด์—์„œ (๊ณต์‹์ ์œผ๋กœ) ์ฐธ์กฐํ•˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜ key๊ฐ’์ด๋‹ค. value์˜ ๋‚ด์šฉ์€ ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰๋˜๋Š” ๋ชจ๋“  JVM ํ”„๋กœ์„ธ์Šค์— (UTF-8๋กœ ๋””์ฝ”๋”ฉํ•˜๋ผ๊ณ ) ๊ฐ•์ œํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
 

  • ์žฅ์ : ํ•˜๋“œ ์ฝ”๋”ฉ์ด๋‹ค๋ณด๋‹ˆ, ์ผ๋‹จ ๊ฐ•๋ ฅํ•˜๋‹ค.
  • ๋‹จ์ : JVM์ด ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค "Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8"๋ผ๋Š”, ๊ฑฐ์Šฌ๋ฆฌ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

 

#2-2 ๋ฐฉ๋ฒ• 2: gradle.properties ์ˆ˜์ •

# in gradle.properties
org.gradle.jvmargs=-Dfile.encoding=UTF-8 -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8

gradle.properties๋ฅผ ์ผœ์„œ ์ € org.gradle...=UTF-8 ํ•œ ์ค„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.
 

  • ์žฅ์ : gradle.properties ํŒŒ์ผ์€ ์ผ๋ฐ˜์ ์œผ๋กœ Git์˜ ์ถ”์  ๋Œ€์ƒ์— ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํŒ€์›๋ผ๋ฆฌ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜, #2-1์ฒ˜๋Ÿผ ๊ณผ๊ฒฉํ•œ ๋ฐฉ์‹ ๋˜ํ•œ ์•„๋‹ˆ๋‹ค.
  • ๋‹จ์ : Gradle์ด ์‹คํ–‰ํ•˜๋Š” Java ํ”„๋กœ์„ธ์Šค์—๋งŒ ์ ์šฉ๋œ๋‹ค.

 

#2-3 ๋ฐฉ๋ฒ• 3: Windows ์‹œ์Šคํ…œ ์ž์ฒด๋ฅผ ๋ฐ”๊พธ๊ธฐ

[์„ค์ •] - [์‹œ๊ฐ„ ๋ฐ ์–ธ์–ด] - [์–ธ์–ด ๋ฐ ์ง€์—ญ] - [์–ธ์–ด] - "Beta: ์„ธ๊ณ„ ์–ธ์–ด ์ง€์›์„ ์œ„ํ•ด Unicode UTF-8 ์‚ฌ์šฉ" ์˜ต์…˜ ํ™œ์„ฑํ™”

์˜ต์…˜ ์ด๋ฆ„์— "Beta"๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ์ด์œ ์—”, ํ›„์ˆ ํ•  ๋‹จ์  ๋•Œ๋ฌธ๋„ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ํ˜ธํ™˜์„ฑ์ด๋ผ๋Š” ๊ฒƒ์ด ์ฐธ ์–ด๋ ต๊ณ  ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฑธ ๋А๊ผˆ๋‹ค.
 

  • ์žฅ์ : VM์„ ์กฐ๊ธˆ๋„ ๊ฑด๋“ค์ด์ง€ ์•Š๊ณ  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ€์žฅ ์ด์ƒ์ ์ธ ํ•ด๊ฒฐ์ฑ…์ด๋ผ๊ณ ๋„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹จ์ : Windows 10 1903 ๋ฒ„์ „๋ถ€ํ„ฐ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ถ”๊ฐ€๋กœ, ์ด ์„ค์ •์„ ํ•˜๊ณ  ๋‚˜๋ฉด (๋ฉ”์ดํ”Œ์Šคํ† ๋ฆฌ ๊ฐ™์€) ์ผ๋ถ€ ๊ฒŒ์ž„์ด ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ฒŒ์ž„์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „๋งˆ๋‹ค ๋งค๋ฒˆ ์„ค์ • ์ฐฝ์„ ๋“ค๋ฝ๋‚ ๋ฝํ•  ์ˆœ ์—†๊ธฐ์— ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ์น˜๋ช…์ ์ธ ๋‹จ์ ์ด๋‹ค.