๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Java

[์ฑ„ํŒ… ํ”„๋กœ๊ทธ๋žจ] ํด๋ž˜์Šค InetAddress

by applemango2021 2021. 8. 15.

InetAddress ํด๋ž˜์Šค

์ž๋ฐ”์—์„œ๋Š” IP์ฃผ์†Œ๋ฅผ InetAddress ๊ฐ์ฒด๋กœ ํ‘œํ˜„ํ•œ๋‹ค. InetAddress๋ฅผ ํ†ตํ•ด์„œ ๋กœ์ปฌ ์„œ๋ฒ„(์ปดํ“จํ„ฐ)์˜ IP ์ฃผ์†Œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋„๋ฉ”์ธ์˜ IP ์ฃผ์†Œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. ๋กœ์ปฌ ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ๋ฅผ ์–ป์œผ๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด InetAddress ๊ฐ์ฒด์˜ getLocalHost() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค. ๋Œ€์‹  UnknownHostException์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋Š” ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

InetAddress์˜ ์ƒ์„ฑ์ž๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ํ•œ ๊ฐœ๋ฐ–์— ์—†๊ณ  ์ด๋งˆ์ €๋„ default ์ ‘๊ทผ ์ œ์–ด์ž๋กœ ๋˜์–ด ์žˆ์–ด์„œ ๋ณ„๋„์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜๋Š” ์—†๋‹ค. ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ๋ชปํ•˜๋Š” ๋Œ€์‹ ์— getLocalHost()์™€ ๊ฐ™์ด IP ์ฃผ์†Œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋“ค์ด ๋ช‡ ๊ฐ€์ง€ ์žˆ๋‹ค. 

 

์ฃผ์š” ๋ฉ”์†Œ๋“œ

๋ฉ”์†Œ๋“œ ๋‚ด์šฉ
getLocalHost() ๋กœ์ปฌ ์„œ๋ฒ„์˜ IP๋ฅผ ๋ฆฌํ„ด
getByName(String host) ๋„๋ฉ”์ธ ์ฃผ์†Œ host์˜ IP๋ฅผ ๋ฆฌํ„ด

(ex) InetAddress.getByName("www.google.com")
getAllByName(String host) ๋„๋ฉ”์ธ ์ฃผ์†Œ host์˜ IP๋“ค์„ ๋ฆฌํ„ด.
์„œ๋ฒ„๋กœ ์—ฐ๊ฒฐ์ด ๋ชฐ๋ฆฌ๋Š” ๊ฒƒ์„ ๋Œ€๋น„ํ•˜์—ฌ ์—ฌ๋Ÿฌ IP๋ฅผ ํ•˜๋‚˜์˜ ๋„๋ฉ”์ธ์— ๋“ฑ๋กํ•ด์„œ ์šด์˜ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ด๋Ÿด ๋•Œ์—๋Š” ์œ„์˜ ๋ฉ”์†Œ๋“œ ๋Œ€์‹  ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  IP ์ฃผ์†Œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. 

(ex) InetAddress.getAllByName("www.naver.com")

 

๊ธฐํƒ€

InetAddress๊ฐ€ ์–ด๋–ป๊ฒŒ ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ์˜ IP๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ง€ ๊ถ๊ธˆํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด๋ดค๋‹ค. ์ž์„ธํžˆ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” SecurityManager, CachedLocalHost๋ผ๋Š” ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•ด ๋ณด์ด๊ธฐ๋Š” ํ•œ๋ฐ, ์ƒ๋žตํ•˜๊ณ  ์‹ค์ œ๋กœ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ถ€๋ถ„์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. 

impl์ด๋ผ๋Š” ๋ณ€์ˆ˜์˜ getLocalHostName() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์‹œ InetAddress์˜ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด static ๋ณ€์ˆ˜๋กœ InetAddressImpl์ด ์„ ์–ธ๋˜์–ด ์žˆ๊ณ , ํŒฉํ† ๋ฆฌ์˜ create()๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„์ฒด๋ฅผ ๋ฐ›์•„์˜จ๋‹ค. ์ด ํŒฉํ† ๋ฆฌ ํด๋ž˜์Šค๋„ InetAddress์˜ ๋‚ด๋ถ€์— ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š”๋ฐ,  native ๋ฉ”์†Œ๋“œ isIPv6Supported()๋กœ IPv6๊ฐ€ ์ง€์›๋˜๋Š”์ง€๋ฅผ ํ™•์ธํ•œ ์ดํ›„์— ๊ตฌํ˜„์ฒด๋ฅผ ์„ ํƒํ•ด ์˜จ๋‹ค. 

ํด๋ž˜์Šค InetAddress
ํด๋ž˜์Šค InetAddress์˜ ์ด๋„ˆ ํด๋ž˜์Šค InetAddressImplFactory

๋‘ ๊ฐœ์˜ ๊ตฌํ˜„์ฒด ์ค‘ ์•„๋ฌด๊ฑฐ๋‚˜ ๋“ค์–ด๊ฐ€์„œ getLocalHostName() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์ด ๋ฉ”์†Œ๋“œ๋„ native ๋ฉ”์†Œ๋“œ์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฒฐ๊ตญ ๋กœ์ปฌ ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‹จ์ด ์•„๋‹ˆ๋ผ OS ํ˜น์€ ํ•˜๋“œ์›จ์–ด,,,,(์ •ํ™•ํžˆ ์ž˜ ๋ชจ๋ฆ„)๋‹จ์—์„œ ์•Œ์•„ ๋‚ผ ์ˆ˜ ๋ฐ–์— ์—†๊ธฐ ๋•Œ๋ฌธ์— native๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•ด๋†จ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.  

 


์ฐธ๊ณ 

- https://www.baeldung.com/java-native

- https://coding-factory.tistory.com/268