Bibi's DevLog ๐ค๐
[TIL-Codesquad] http/https, ๋์นญํค/๋น๋์นญํค, TCP, ํฌํธ, URL / ์๋ฐ Socket, InetAddress, URL, URLConnection ํด๋์ค ๋ณธ๋ฌธ
[TIL-Codesquad] http/https, ๋์นญํค/๋น๋์นญํค, TCP, ํฌํธ, URL / ์๋ฐ Socket, InetAddress, URL, URLConnection ํด๋์ค
๋น๋น bibi 2021. 2. 1. 22:19[210201]
9๋ฒ์งธ CS๋ฏธ์ !
๋คํธ์ํฌ ๊ณต๋ถ๋ ์ฒ์์ด๋ผ ๊ธฐ์ด๋ถํฐ ์ฐพ์๋ณด๋ฉด์ ๊ณต๋ถํ๋ค.
HTTPS๊ฐ ๋ญ๊ณ ์ ์ฐ๋์? ๋์นญํค, ๋น๋์นญํค
HTTP/HTTPS๋?
https://www.google.com ์ฒ๋ผ ๋๋ฉ์ธ ์ฃผ์ ์์ ๋ถ๋๋ค.
์์ ์๋ http๊ฐ ๋ง์์ง๋ง, ์์ฆ์ ๊ฑฐ์ ๋๋ถ๋ถ https๋ฅผ ์ด๋ค.
HTTP : Hyper-Text Transfer Protocol
HTTPS : Hyper-Text Transfer Protocol Secure (HTTP๋ณด๋ค ์์ )
์ HTTPS๊ฐ ๋ ์์ ํ๊ฐ?
๋ด๊ฐ ์น ์ฌ์ดํธ์ ๋ณด๋ด๋ ์ ๋ณด๋ค๋ฅผ ์ 3์๊ฐ ํ์ณ๋ณด์ง ๋ชปํ๊ฒ ํจ.
์๋ฅผ ๋ค์ด ๋ค์ด๋ฒ ๋ก๊ทธ์ธ์ ํ ๋..
HTTP๋ก ๋ณด๋ด๋ฉด ID/PW๊ฐ ์ ๋ ฅํ ํํ ๊ทธ๋๋ก (๋๊ตฌ๋ ์์๋ณผ ์ ์๋ ํํ) ์ ์ก๋์ด ๋ด๊ฐ ์ ๋ ฅํ ์ ๋ณด๊ฐ ๋ ธ์ถ๋๋ค.
HTTPS๋ก ๋ณด๋ด๋ฉด ์ ๋ ฅ ์ ๋ณด๋ฅผ ๋ค์ด๋ฒ๋ง ์์๋ณผ ์ ์๋ ์ํธํ๋ ํ ์คํธ๋ก ๋ณ๊ฒฝํด ์ค์ด ๋ณด๋ธ๋ค. (๋ชจ๋ฅด๋ ์ฌ๋์ ๋ด๋ ์์๋ณผ ์ ์๋ ํํ)๋ด๊ฐ ์ ์ํ ์ฌ์ดํธ๊ฐ ์ ๋ขฐํ ์ ์๋ ์ฌ์ดํธ์ธ์ง ํ๋ณํ ์ ์์.
๊ธฐ๊ด์ผ๋ก ๊ฒ์ฆ๋ ์ฌ์ดํธ๋ง HTTPS์ฃผ์ ์ฌ์ฉ์ด ํ๊ฐ๋๊ณ ,
์ผ๋ฐ HTTP ์ฌ์ดํธ๋ '์์ ํ์ง ์์' ๊ฒฝ๊ณ ํ์๊ฐ ๋จ๊ฒ ๋์ด์๊ธฐ ๋๋ฌธ.์๋ฅผ ๋ค์ด ๋ฒ์ฃ์ ์ด์ฉ๋๋ ํผ์ฑ ์ฌ์ดํธ์ธ์ง / ์ง์ง ์ฌ์ดํธ์ธ์ง ๊ตฌ๋ณ ๊ฐ๋ฅ.
HTTP๋ ๋ฌด์์ธ๊ฐ?
์ฐ๋ฆฌ๊ฐ ์ปดํจํฐ์์ ๋ค์ด๋ฒ๋ผ๋ ์น ์ฌ์ดํธ์ ์ ์ํ๋ฉด,
๋ด ์ปดํจํฐ์ ๋ค์ด๋ฒ ์๋ฒ์ปดํจํฐ๊ฐ ์๋ก ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ณ ๋ฐ๋๋ค.
ํ์ง๋ง ์ปดํจํฐ๋ ์ฃผ๊ณ ๋ฐ์ ๋ฉ์์ง์ ์๋ฏธ๋ฅผ ์์ง ๋ชปํ๋ค.
์? ๋ฉ์์ง๊ฐ ์ด๋ค ํ์์ผ๋ก ์์ฑ๋์๋์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ.
์๋ฅผ ๋ค์ด
0
์ด 0์ธ์ง, O์ธ์ง, ใ ์ธ์ง ์๋ ค๋ฉด ์ด ๋ฌธ์๊ฐ ์ซ์์ธ์ง/์์ด์ธ์ง/ํ๊ธ์ธ์ง ์์์ผ ํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
HTTP๋ ์ธํฐ๋ท์์ ์ปค๋ฎค๋์ผ์ด์ ์ ์ฌ์ฉ๋๋ ํ์๋ค ์ค ํ๋์ด๋ค.
์ฌ๋์ 010-1234-5678์ ๋ณด๊ณ ๋ฐ๋ก ์ ํ๋ฒํธ ํ์์์ ์์ง๋ง, ์ปดํจํฐ๋ ํ์๊น์ง ์๋ ค์ฃผ์ด์ผ ์ ๋ณด๋ฅผ ์ดํดํ๋ค.
๊ทธ๋์ ์ ์ํ๋ ค๋ ์๋ฒ์ ์์ฒญ ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ๋ ๋ง๋ค, ์ฃผ์(www.google.com ๋ฑ)์์http://
๋๋https://
๋ฅผ ๋ถ์ฌ ์์ฒญ ๋ฉ์์ง๊ฐ ์ด๋ค ํ์์ธ์ง ์๋ ค์ฃผ๋ ๊ฒ์ด๋ค.
๊ทธ๋์ผ ๊ตฌ๊ธ ์๋ฒ์ปดํจํฐ๋ http(s) ํ์์ผ๋ก ์์ฒญ ๋ฉ์์ง๋ฅผ ์ฝ๊ณ , ์ด๋ค ํ์ด์ง๋ฅผ ๋ณด์ฌ๋ฌ๋ผ๋ ์์ฒญ์ธ์ง ์ดํดํ ๋ค์ ๊ทธ์ ๋ง๋ ์๋ต ๋ฉ์์ง๋ฅผ ์์ฑํด ๋ณด๋ด์ค ์ ์๋ค.
๊ทธ๋ฌ๋ฉด ๋ด ์ปดํจํฐ๋ ์๋ต ๋ฉ์์ง๋ฅผ http(s)ํ์์ ๋ฐ๋ผ ํด๋ ํด์ ์ฐ๋ฆฌ๊ฐ ์์ฒญํ ํ์ด์ง๋ฅผ ํ๋ฉด์ ๋ณด์ฌ์ค๋ค.
HTTPS์ ๋ณด์ ๊ธฐ๋ฅ์ ์ด๋ป๊ฒ ๊ตฌํ๋๋๊ฐ?
์์ HTTPS๋ ๋ ๊ฐ์ง ๋ฉด์์ HTTP๋ณด๋ค ์์ ํ๋ค๊ณ ํ๋ค.
- ๋ด๊ฐ ์น ์ฌ์ดํธ์ ๋ณด๋ด๋ ์ ๋ณด๋ค๋ฅผ ์ 3์๊ฐ ํ์ณ๋ณด์ง ๋ชปํ๊ฒ ํจ.
- ๋ด๊ฐ ์ ์ํ ์ฌ์ดํธ๊ฐ ์ ๋ขฐํ ์ ์๋ ์ฌ์ดํธ์ธ์ง ํ๋ณํ ์ ์์.
๊ทธ๋ ๋ค๋ฉด ์์ ๋ ๋ณด์ ๊ธฐ๋ฅ์ ์ด๋ค ์๋ฆฌ๋ก ๊ตฌํ๋๋๊ฐ?
๋์นญํค, ๋น๋์นญํค (์ปดํจํฐ๊ณตํ - ๋ณด์/์ํธํ)
์ ์์์ ์๊ตฐ์๊ฒ ํธ์ง๋ฅผ ๋ณด๋ผ ๋, ์ค๊ฐ์ ์ ๊ตฐ์ด ์ด ํธ์ง๋ฅผ ๋นผ์์ ๊ฐ๋ ๋ด์ฉ์ ์์๋ณผ ์ ์๊ฒ ํ๋ ค๋ฉด ํธ์ง์ ๋ด์ฉ์ ์ํธํํด์ผ ํ ๊ฒ์ด๋ค.
์ํธํ๋ ๋ฉ์์ง๋ ์๊ตฐ๋ง ์ฝ์ ์ ์๊ณ , ์ ๊ตฐ์ ์ฝ์ ์ ์์ด์ผ ํ๋ค.
๋์นญํค ๋ฐฉ์ Symmetric Cryptography / One key Cryptography
: ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ์ชฝ์ ๋ฉ์์ง๋ฅผ ์ํธํํ๊ณ , ๋ฐ๋ ์ชฝ์ ๋ฉ์์ง๋ฅผ ๋ณตํธํํ๋ ๋ฐฉ์.
์ํธํ&๋ณตํธํ์ ๊ฐ์ ๋ฐฉ์์ ๊ณต์ ํ๋ค.
์๋ฅผ ๋ค์ด ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ์ชฝ, ๋ฐ๋ ์ชฝ ๋ชจ๋ A=27, B=9, C=51 .. ๋ผ๋ ํ๋ก ํด๋ ํ๋ค๊ณ ๊ณต์ ํ๋ ๋ฐฉ์์ด๋ค.
์์ ํ (A=27, B=9, C=51 .. ) ๊ฐ '๋์นญํค Symmetric Key' ๋ฐฉ์์ ํด๋นํ๋ค.
์๋ฅผ ๋ค์ด ์์์ ๋ฌธ์์ด
a084#l%^q3_97
๋ฅผ 'ํค'๋ผ๊ณ ๋ถ๋ฅด๊ณ ,
๋ณด๋ด๊ณ ์ ํ๋ ๋ฉ์์ง๋ฅผ ์์ 'ํค'์ ํจ๊ป ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ ๋ฃ๊ณ ์ํธํํ๋ฉด ์๋ฌด๋ ์์๋ณผ ์ ์๋ ์ํธ๋ฌธ์ผ๋ก ๋ณํ๋๋ค. (์ํธํ)
๋ฐ์ ์ฌ๋์ ๊ฐ์ ํค(a084#l%^q3_97
)๋ฅผ ๊ฐ์ง๊ณ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ฑฐ๊พธ๋ก ์คํํ์ฌ ์ํธ๋ฌธ์ ํด๋ ํ ์ ์๋ค. (๋ณตํธํ)
๋จ์ : ์ํธํ&๋ณตํธํ ๋ฐฉ์(ํค)์ด ๋ ธ์ถ๋๋ฉด ๋ฉ์์ง๋ ๋ ธ์ถ๋๋ค.
โ ๋์นญํค ๋ฐฉ์์ ํ๊ณ.
ํค ๊ฐ์ด ์๋ค๋ฉด ์ํธ๋ฅผ ์ ๋ ํ ์ ์๋ค. ==
ํค ๊ฐ๋ง ์๋ค๋ฉด ์ํธ๋ฅผ ํ ์ ์๋ค.
์ ์ด์ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ์ชฝ๊ณผ ๋ฐ๋ ์ชฝ์ด ํด๋น 'ํค'๋ฅผ ๊ณต์ ํด์ผ ํ๋๋ฐ,
์ต์ ํ ๋ฒ์ ํด๋น 'ํค'๋ฅผ ๋ฐ๋์ ์ ์กํด์ผ ํ ๊ฒ์ด๊ณ , ์ด 'ํค'๋ฅผ ์ 3์๊ฐ ํ์ณ๋ณธ๋ค๋ฉด ์ํธํ์ ์๋ฏธ๊ฐ ์์ด์ง๋ค.
๋น๋์นญํค(๊ณต๊ฐํค) ๋ฐฉ์ Asymmetric Cryptography / Two key Cryptography
๋์นญํค ๋ฐฉ์์ ๋ณด์ํ ์ ์ํธํ ๋ฐฉ์ (1970๋ ๋ ์ํ์๋ค์ด ๊ฐ๋ฐ)
๋น๋์นญํค ๋ฐฉ์์๋ ๋ ๊ฐ์ ํค๊ฐ ์ฌ์ฉ๋๋ค - 'A'ํค์ 'B'ํค๋ผ๊ณ ํ์.
์ด ๋์ ํ ์์ด๋ฉฐ, ์๋ก ๋ค๋ฅธ ํค์ด๋ค. (์๋ก ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋น๋์นญํค์ด๋ค)
๋์นญํค ๋ฐฉ์ : ์ด๋ค ํค๋ก ์ํธํ๋ฅผ ํ๋ฉด, ๊ฐ์ ํค๋ก ๋ณตํธํ๋ฅผ ํ ์ ์๋ค.
๋น๋์นญํค(๊ณต๊ฐํค) ๋ฐฉ์ : Aํค๋ก ์ํธํ๋ฅผ ํ๋ฉด, Bํค๋ก๋ง ๋ณตํธํ๋ฅผ ํ ์ ์๋ค. ๋ฐ๋๋ก Bํค๋ก ์ํธํ๋ฅผ ํ๋ฉด, Aํค๋ก๋ง ๋ณตํธํ๋ฅผ ํ ์ ์๋ค.
์๋ฅผ ๋ค์ด ๋ค์ด๋ฒ ์๋ฒ๋ Aํค์ Bํค ์ค ํ๋์ ํค๋ฅผ ๋น๋ฐ๋ก ๋ณด๊ดํ๊ณ (== ๊ฐ์ธํค Private Key ),
๋ค๋ฅธ ํ๋๋ ๋์ค์๊ฒ ๊ณต๊ฐํ๋ค - ๋๊ตฌ๋ ๋ณผ ์ ์๋ค (== ๊ณต๊ฐํค Public Key)์ฌ์ฉ์๋ ๊ณต๊ฐํค๋ฅผ ๊ฐ์ง๊ณ , ์ฌ์ฉ์์ ๋ณด๋ฅผ ์ํธํํด ๋ค์ด๋ฒ์ ๋ณด๋ธ๋ค.
๋ค์ด๋ฒ ์๋ฒ๋ ๊ฐ์ธํค๋ฅผ ๊ฐ์ง๊ณ ๊ณต๊ฐํค๋ก ์ํธํ๋ ์ ๋ณด๋ฅผ ๋ณตํธํํ๋ค.
์ 3์๊ฐ ์ฌ์ฉ์์ ๋ณด๊ฐ ์ ์ก๋ ๋ ๊ฐ๋ก์ฑ๋๋ผ๋, ๊ฐ์ธํค๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ณตํธํํ ์ ์๋ค.
โ 1. ๋ด๊ฐ ์น ์ฌ์ดํธ์ ๋ณด๋ด๋ ์ ๋ณด๋ค๋ฅผ ์ 3์๊ฐ ํ์ณ๋ณด์ง ๋ชปํ๊ฒ ํจ. ์ด๋ผ๋ ๋ชฉํ ๋ฌ์ฑ.
๋ค์ด๋ฒ ์๋ฒ์์ ์ฐ๋ฆฌ์๊ฒ ๋ณด๋ด๋ ์ ๋ณด์ ์ผ๋ถ๋ ๋ค์ด๋ฒ์ ๊ฐ์ธํค๋ก ์ํธํ๊ฐ ๋์ด ์๋ค.
'๋ค์ด๋ฒ์ ๊ฐ์ธํค๋ก ์ํธํ๋ ์ ๋ณด์ด๊ธฐ ๋๋ฌธ์' ์ฐ๋ฆฌ๊ฐ ๋ค์ด๋ฒ์ ๊ณต๊ฐํค๋ก ์ํธํ๋ ์ ๋ณด๋ฅผ ํด๋ ํด ์์๋ณผ ์ ์๋ค.
( ๋ค์ด๋ฒ์ ๊ณต๊ฐํค๋ก ํด๋ ํ ์ ์๋ ์ ๋ณด๋ ๋ค์ด๋ฒ์ ๊ฐ์ธํค๋ก ์ํธํ๋ ์ ๋ณด๋ค ๋ฟ์ด๊ธฐ ๋๋ฌธ! )๋ฐ๋ผ์ ์ ๋ขฐํ ์ ์๋ ๊ธฐ๊ด์์ '์ด ๊ณต๊ฐํค๊ฐ ๋ค์ด๋ฒ์ ๊ณต๊ฐํค๊ฐ ๋ง๋ค'๋ผ๊ณ ๊ฒ์ฆํด ์ค๋ค๋ฉด, ๊ทธ๊ฑธ ๊ธฐ์ค์ผ๋ก ์์ ํ๊ฒ ๋ค์ด๋ฒ๋ฅผ ์ด์ฉํ ์ ์๋ ๊ฒ์ด๋ค.
โ 2. ๋ด๊ฐ ์ ์ํ ์ฌ์ดํธ๊ฐ ์ ๋ขฐํ ์ ์๋ ์ฌ์ดํธ์ธ์ง ํ๋ณํ ์ ์์.
HTTPS์ ์ค์ ๊ตฌํ๊ณผ์
๋จผ์ ๋์ค์๊ฒ ๋ฟ๋ฆฐ ๊ณต๊ฐํค๊ฐ ์ง์ง '๋ค์ด๋ฒ์ ๊ณต๊ฐํค'๊ฐ ๋ง๋์ง ํ์ธํ ์ ์์ด์ผ ํ๋ค.
CA (Certificate Authority)๋ผ๋ ๊ณต์ธ ๋ฏผ๊ฐ๊ธฐ์ ์ด ์ด๋ฌํ ๊ณต๊ฐํค ๊ฒ์ฆ์์ ์ ๋ด๋นํ๋ค.
ํฌ๋กฌ, ์ฌํ๋ฆฌ, ์ต์คํ๋ก๋ฌ ๋ฑ์ ์น๋ธ๋ผ์ฐ์ ์๋ ์ด CA๋ค์ ๋ชฉ๋ก์ด ๋ด์ฅ๋์ด ์์.
๋ด ์ปดํจํฐ์ ๋ธ๋ผ์ฐ์ = ์์ฒญ์ ๋ณด๋ด๋ ์ชฝ์ด๋ผ๊ณ ํด์ ํด๋ผ์ด์ธํธ client๋ผ๊ณ ๋ถ๋ฅธ๋ค.
*client : server ์ ์๋๋๋ ๊ฐ๋ . '์ฌ์ฉ์'๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.ํด๋ผ์ด์ธํธ๋ ์์ง ์๋ฒ ์ปดํจํฐ๊ฐ ๋ค์ด๋ฒ ์๋ฒ์ปดํจํฐ๊ฐ ๋ง๋์ง ์ ๋ขฐํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์, ์๋ก ํ์ํ๋ ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋๋ค. ์ด ํ์๊ณผ์ ์ Handshake(์ ์)๋ผ๊ณ ํ๋ค.
Handshake์ ๊ณผ์
ํด๋ผ์ด์ธํธ๋ ๋๋ค ๋ฐ์ดํฐ๋ฅผ ์์ฑํด ์๋ฒ์ ๋ณด๋
์๋ฒ๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ๋๋ค๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ณ ,
์๋ฒ์์์ ์์ฑํ ๋๋ค๋ฐ์ดํฐ & ํด๋น ์๋ฒ์ ์ธ์ฆ์๋ฅผ ํด๋ผ์ด์ธํธ์ ๋ณด๋.โ ํด๋ผ์ด์ธํธ๋ ๋๋ค๋ฐ์ดํฐ1(ํด๋ผ์ด์ธํธ๊ฐ ๋ง๋ ), ๋๋ค๋ฐ์ดํฐ2(์๋ฒ๊ฐ ๋ง๋ ), ์๋ฒ ์ธ์ฆ์ ๋ฅผ ๊ฐ๊ฒ ๋จ.
โ ์๋ฒ๋ ๋๋ค๋ฐ์ดํฐ1(ํด๋ผ์ด์ธํธ๊ฐ ๋ง๋ ), ๋๋ค๋ฐ์ดํฐ2(์๋ฒ๊ฐ ๋ง๋ )๋ฅผ ๊ฐ๊ฒ ๋จ.
(Handshake ๋)
ํด๋ผ์ด์ธํธ๋ ์๋ฒ๊ฐ ๋ณด๋ธ ์ธ์ฆ์๊ฐ ์ง์ง์ธ์ง๋ฅผ ๊ฒ์ฆํ๋ค.
์ด๋ป๊ฒ? ๋ธ๋ผ์ฐ์ ์ ๋ด์ฅ๋ CA๋ค์ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ๊ฒ์ฆํจ. (๋น๋์นญํค ์์คํ ํ์ฉ)CA์ ์ธ์ฆ์ ๋ฐ์ ์ธ์ฆ์๋ค์, ํด๋น CA์ ๊ฐ์ธํค๋ก ์ํธํ๋์ด ์๋ค.
๊ฐ ๋ธ๋ผ์ฐ์ ์๋ CA์ ๊ณต๊ฐํค๊ฐ ๋ด์ฅ๋์ด ์๋ค.
๋ฐ๋ผ์ ๋ง์ฝ ํด๋น ์ธ์ฆ์๊ฐ ์ง์ง๋ผ๋ฉด, ๋ธ๋ผ์ฐ์ ์ ๋ด์ฅ๋ CA์ ๊ณต๊ฐํค๋ก ๋ณตํธํ๊ฐ ๋ ๊ฒ์ด๋ค.
(์? ๊ณต๊ฐํค๋ก ๋ณตํธํ๋ ์ ์๋ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ ์ ์๋ ๊ฑด, ๊ทธ์ ๋์ํ๋ ๊ฐ์ธํค๋ฅผ ๊ฐ์ง CA๋ฟ์ด๊ธฐ ๋๋ฌธ์.)๋ง์ฝ ๋ธ๋ผ์ฐ์ ์ CA ๋ฆฌ์คํธ ์ค์ ํด๋น ์ธ์ฆ์๊ฐ ํด๋น๋๋ ๊ฒ์ด ์๋ค๋ฉด?
์ง์ง ์ธ์ฆ์๊ฐ ์๋ ์ ์๋ค๊ณ ํ๋จํ๊ณ , ๋ธ๋ผ์ฐ์ ์ฃผ์์ฐฝ์ '์์ ํ์ง ์์ Not secure' ํ์๊ฐ ๋จ๊ฒ ๋๋ค.๋ณตํธํ์ ์ฑ๊ณตํ ์ธ์ฆ์ ๋ด์๋ ํด๋น ์๋ฒ์ ๊ณต๊ฐํค๊ฐ ํฌํจ๋์ด ์๋ค.
์ด์ ์ด ๊ณต๊ฐํค๋ฅผ ํตํด ๋ฉ์์ง๋ฅผ ์ํธํํด์ ์๋ฒ์ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ค? (๋น๋์นญํค ๋ฐฉ์)
โ ๊ผญ ๊ทธ๋ ์ง ์๋ค. ์ค์ ๋ก๋ ๋น๋์นญํค ๋ฐฉ์ & ๋์นญํค ๋ฐฉ์์ ํผํฉํ์ฌ ์ฌ์ฉํ๋ค.
*WHY?? *
๋น๋์นญํค ๋ฐฉ์์ ์ํธํ/๋ณตํธํ ๊ณผ์ ์ด ๋์นญํค ๋ฐฉ์๋ณด๋ค ์ปดํจํฐ์ ํจ์ฌ ํฐ ๋ถ๋ด์ ์ฃผ๊ธฐ ๋๋ฌธ.
(๋น๋์นญํค ๋ฐฉ์์ ๋จ์ )์ฌ์ดํธ ์ด์ฉ์ ์ฃผ๊ณ ๋ฐ์์ผ ํ๋ ๋ค๋์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋น๋์นญํค๋ก ์ํธํ/๋ณตํธํํ๋ ๊ฒ์ ๋ฌด๋ฆฌ์ด๊ธฐ ๋๋ฌธ์, ์ฃผ๊ณ ๋ฐ๋ ๋ฐ์ดํฐ๋ ๋์นญํค ๋ฐฉ์์ผ๋ก ์ํธํํ๋ค.
ํด๋น ๋์นญํค๋ฅผ '๊ณต์ ํ ๋'๋ง ๋น๋์นญํค ๋ฐฉ์์ ์ฌ์ฉํ๊ณ , ์์ ํ๊ฒ ๊ณต์ ๋ ๋์นญํค๋ฅผ ์ฌ์ฉํด ์ผ๋ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ด๋ค.- 1.์ Handshake์์ ๋ฐ์ํ ๋๋ค๋ฐ์ดํฐ1, ๋๋ค๋ฐ์ดํฐ2๋ฅผ ๊ฐ์ง๊ณ ํด๋ผ์ด์ธํธ์์ ์์ ํค๋ฅผ ์์ฑํ๋ค.
- ์์ ํค๋ฅผ ์๋ฒ์ ๊ณต๊ฐํค๋ก ์ํธํํ์ฌ ์๋ฒ๋ก ๋ณด๋ธ๋ค.
- ์์ชฝ์์ ์ด๋ค ๊ณผ์ ์ ๊ฑฐ์ณ ๋์ผํ ๋์นญํค๋ก ๋ง๋ค์ด์ง๋ค.
โ ํด๋น ๋์นญํค๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๋๋ง ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์, ๋์นญํค๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ผ๋ ์ 3์๊ฐ ์์๋ณผ ์ ์๊ฒ ๋๋ค.
๋คํธ์ํฌ
*'์๋ฐ์ ์ ' 2๊ถ์ ์ฐธ์กฐํ์ต๋๋ค.
๋คํธ์ํนnetworking ์ด๋?
์ฌ์ฉ์๊ฐ ์ฅ๋น์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ์์ .
๋ ๋ ์ด์์ ์ปดํจํฐ๋ฅผ ์ฐ๊ฒฐํ์ฌ ๋คํธ์ํฌ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ.
๋คํธ์ํฌ๋ ๋ ์ด์ดlayer๋ก ๊ตฌ๋ถ๋๋ค. (OSI 7 layer ๋ฑ)
์ผ๋ฐ์ ์ธ ๋คํธ์ํฌ ๋ ์ด์ด ๊ตฌ์ฑ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ ํ๋ฆฌ์ผ์ด์
๋ ์ด์ด (HTTP, FTP, Telnet, ...)
- HTTP : HyperText Trantfer Protocol
- FTP : File Transfer Protocol
- ํธ๋์คํฌํธ ๋ ์ด์ด (TCP, UDP, ...)
- TCP : Transmission Control Protocol
- UDP : User Datagram Protocol
- ๋คํธ์ํฌ ๋ ์ด์ด (IP, ...)
- ๋งํฌ ๋ ์ด์ด (device driver, ...)
TCP ํต์
: Transmission Control Protocol ์ฐ๊ฒฐ ๊ธฐ๋ฐ ํต์
- ๊ฐ์ฅ ๋ํ์ ์ธ ํต์ ๋ฐฉ๋ฒ. HTTP, FTP, Telnet ๋ชจ๋ TCPํต์ ์ ํจ.
- TCP๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ธ ๊ฒฝ์ฐ ์๋๋ฐฉ์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์๋์ง ๋ณด์ฅํ ์ ์๋ค.
TCP๋ก ํต์ ์ ์ ์ก์ด ์ฑ๊ณตํ๋ค / ์คํจํ๋ค ๋ ํต๋ณด๋ฅผ ๋ณด๋ด์ฃผ๊ธฐ ๋๋ฌธ.
UDP
User Datagram Protocol
- UDP๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ธ ๊ฒฝ์ฐ ์๋๋ฐฉ์ด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์๋์ง ๋ณด์ฅํ์ง ์๋๋ค.
TCP์ UDP ๋น๊ต
- TCP๋ ์ ํ, UDP๋ ํ๋ฐฐ๋ก ๋น์ ํ ์ ์๋ค.
- TCP๋ ๋ฐ์ดํฐ ์ ์ก ์ฌ๋ถ๋ฅผ ๋ณด์ฅ๋ฐ์ง๋ง, UDP๋ณด๋ค ๋ด๋ถ ์ฒ๋ฆฌ์ ์ฐจ๊ฐ ๋ณต์กํ๊ณ ๋๋ฆฌ๊ณ ๋ฌด๊ฒ๋ค.
ํฌํธ port
ํฌํธ (port, ํญ๊ตฌ)๋ ์ธ๋ถ ์ฅ๋น์ ์ ์ํ๊ธฐ ์ํ ํ๋ฌ๊ทธ ๊ฐ์ ๊ฒ์ด๋ค.
ํฌํธ๋ ์ด์์ฒด์ ํต์ ์ ์ข ๋จ์ ์ด๋ค. ์ด ์ฉ์ด๋ ํ๋์จ์ด ์ฅ์น์๋ ์ฌ์ฉ๋์ง๋ง,
์ํํธ์จ์ด์์๋ ๋คํธ์ํฌ ์๋น์ค๋ ํน์ ํ๋ก์ธ์ค๋ฅผ ์๋ณํ๋ ๋ ผ๋ฆฌ ๋จ์์ด๋ค.
์ฌ์ฉ๋ฒ : URI ๋ฌธ๋ฒ์ ์ํด์ ์ฌ์ฉ ๋ฐ ํ๊ธฐํ ์ ์์ผ๋ฉฐ, IP ์ฃผ์์ ํจ๊ป ํ๊ธฐํ๋ ์๋ ๋ค์๊ณผ ๊ฐ๋ค.
์ฌ๊ธฐ์ 000.000.000.000์ IP ์ฃผ์๋ฅผ ๋ํ๋ด๋ฉฐ : ๋ค์์ 21์ด ํฌํธ ๋ฒํธ๋ฅผ ์๋ฏธํ๋ค. (-์ํค๋ฐฑ๊ณผ)
*IP์ฃผ์ : ์ปดํจํฐ๋ฅผ ์ฐพ์ ๋ ํ์ํ ์ฃผ์
ํฌํธ : ์ปดํจํฐ ๋ด์์ ํ๋ก๊ทธ๋จ์ ์ฐพ์ ๋ ํ์ํ ๋ฒํธ
-> IP์ฃผ์์ ํฌํธ๋ฅผ ์ด์ฉํด ํน์ ์ปดํจํฐ์ ํ๋ก๊ทธ๋จ์ ์ด์ฉํ ์ ์๋ค.
ํ๋ก๊ทธ๋๋ฐ์์๋ ์น๋ธ๋ผ์ฐ์ ๋ก ์ธํฐ๋ท์์ ์ด๋ค ์๋ฒ์ ์ ์ํ ๋,
์น๋ธ๋ผ์ฐ์ ํ๋ก๊ทธ๋จ๊ณผ ์น์๋ฒ ํ๋ก๊ทธ๋จ์ ์ฐ๊ฒฐํด ์ฃผ๋ ์ญํ ์ ํ๋ ๊ฒ์ด ํฌํธ์ ํด๋นํ๋ค.
์ฆ ํฌํธ๋ '๋ ผ๋ฆฌ์ ์ ์์ฅ์๋ฅผ ๋ํ๋ด๋ ์ด์ ํ'์ ํด๋นํ๋ค.
๋ธ๋ผ์ฐ์ ์์ ํน์ ์๋ฒ์ ์ ์ํ๊ธฐ ์ํด์๋ URL์ด๋ IP์ฃผ์๋ฅผ ์ ๋ ฅํด์ผ ํ๋ค.
๊ทธ๋ฌ๋ฉด ์น๋ธ๋ผ์ฐ์ ๋ URL/IP ์ ๋ณด๋ก ์ธํฐ๋ท์ ํตํด ํด๋น ์๋ฒ์ปดํจํฐ๋ก ์ฐพ์๊ฐ๋ค.ํด๋น ์๋ฒ์ปดํจํฐ์ ์ ๊ทผํ ๋ค, ์๋ฒ์ปดํจํฐ์ ํ๋ก๊ทธ๋จ ์ค ์ด๋ค ํ๋ก๊ทธ๋จ์ด ๋ด๊ฐ ์ ์ํ๋ ค๋ ํ๋ก๊ทธ๋จ์ธ์ง ์๋ ค์ฃผ๋ ๊ฒ์ด ํฌํธ ๋ฒํธ์ ์ญํ ์ด๋ค.
Well-Known Port
ํฌํธ๋ 16๋นํธ๋ก ๊ตฌ์ฑ๋์ด 0~65535๋ฒ๊น์ง ์ฌ์ฉํ ์ ์๋ค.
ํน์ ๋ฒํธ์ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ฃผ์ ๋ค์ :
๋ฅผ ๋ถ์ด๊ณ ํฌํธ๋ฒํธ๋ฅผ ์ ์ด์ฃผ์ด์ผ ํ๋ค.
(์น ๋ธ๋ผ์ฐ์ ์์ ํฌํธ๋ฒํธ๋ฅผ ์ฐ์ง ์๋ ๊ฒ์, URL์ ๋ธ๋ผ์ฐ์ ์ ์
๋ ฅํ๋ฉด ์๋์ผ๋ก :80
์ด ๋ถ๊ธฐ ๋๋ฌธ์)
0~1023๋ฒ ํฌํธ๋ well-known port์ ํด๋นํจ.
- ํน์ ์ฐ์์๋ฅผ ์ํด ํ ๋นํ TCP/UDP ํฌํธ๋ฒํธ๋ก ์ด๋ฃจ์ด์ ธ ์์.
- ์ ํด์ ธ ์๋ ํฌํธ๋ฒํธ์ด๋ฏ๋ก ๋๋๋ก ๋ค๋ฅธ ์ฉ๋๋ก ์ฌ์ฉํ์ง ์์์ผ.
์๋ฅผ ๋ค์ด..
22
๋ฒ : SSH ํ๋กํ ์ฝ / ํฌํธ ํฌ์๋ฉ23
๋ฒ : Telnet (์ํธํ๋์ง ์์ ํ ์คํธํต์ )25
๋ฒ : SMTP (์ด๋ฉ์ผ ์ ์ก ํ๋กํ ์ฝ)53
๋ฒ : DNS (Domain Name System)80
๋ฒ : HTTP (์นํ์ด์ง ์ ์ก ํ๋กํ ์ฝ)443
๋ฒ : HTTPS (HyperText Transfer Protocol over Secure Sockets), SSL1024 ~ 49151 : registered port ๋ฑ๋ก๋ ํฌํธ
49152 ~ 65535 : dynamic port ๋์ ํฌํธ
์์ผ ํต์ ๊ณผ Socket ํด๋์ค (์๋ฐ)
*''์๋ฐ์ ์ '' 2๊ถ์ ์ฐธ์กฐํ์ต๋๋ค.
Socket ํด๋์ค
TCPํต์ ์ ์๋ฐ์์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ Socket
ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ค. (java.net
ํจํค์ง)
Socket
ํด๋์ค๋ ์๊ฒฉ์ ์๋ ์ฅ๋น์์ ์ฐ๊ฒฐ์ํ๋ฅผ ๋ณด๊ดํ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ์ชฝ (๋ณดํต ํด๋ผ์ด์ธํธ)์์
Socket
๊ฐ์ฒด๋ฅผ ์์ฑํด ์ฌ์ฉํจ.- ํด๋ผ์ด์ธํธ์์๋
Socket
ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑํด์ผ ํจ. Socket()
์์ฑ์๋ ๋งค์ฐ ๋ค์.Socket(String host, int port)
๊ฐ ๊ฐ์ฅ ํธํจ.close()
: ์์ผ ์ฐ๊ฒฐ์ ์ข ๋ฃํจ.
- ํด๋ผ์ด์ธํธ์์๋
- ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ ์ชฝ (๋ณดํต ์๋ฒ)์์ ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ฐ์ผ๋ฉด,
ServerSocket
์ผ๋ก ์์ฒญ์ ๋ํSocket
๊ฐ์ฒด๋ฅผ ์์ฑํด ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํจ.ServerSocket
ํด๋์ค๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ (ServerSocket
ํด๋์ค๊ฐ ์ ๊ณตํ๋ ๋ฉ์๋์์ ํด๋ผ์ด์ธํธ ์์ฒญ์ด ์๊ธฐ๋ฉดSocket
๊ฐ์ฒด๋ฅผ ์์ฑํด ์ ๋ฌํจ)ServerSocket()
์์ฑ์๋ ๋ณ๋๋ก ์ฐ๊ฒฐ์์ ์ ํด์ผ๋ง ๋๊ธฐ๊ฐ ๊ฐ๋ฅํ๋ค.
(๋ค๋ฅธ ํด๋์ค๋ค์ ๊ฐ์ฒด๊ฐ ์์ฑ๋์๋ง์ ์ฐ๊ฒฐ ๋๊ธฐ์ํ๊ฐ ๋๋ค)accept()
:ServerSocket
์ด ์๋ก์ด ์์ผ ์ฐ๊ฒฐ์ ๋๊ธฐํ๊ฒ ํ๋ ๋ฉ์๋. ์ฐ๊ฒฐ์ด ๋๋ฉด Socket๊ฐ์ฒด๋ฅผ ๋ฆฌํดํจclose()
: ์์ผ ์ฐ๊ฒฐ์ ์ข ๋ฃํจ
- ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ ์ชฝ (
ServerSocket
)์ธ ์๋ฒ๊ฐ ์ผ์ ธ ์์ด์ผ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ธ ์ชฝ(Socket
)์ ๋ฐ์ดํฐ๋ฅผ ์ ์์ ์ผ๋ก ๋ฐ์ ์ ์๋ค. ๋ฐ๋ผ์ ์๋ฒ ์ญํ ์ ํด๋์ค๋ฅผ ๋จผ์ ์คํํ ๋ค์ ํด๋ผ์ด์ธํธ ์ญํ ์ ํด๋์ค๋ฅผ ์คํํด์ผ ํ๋ค.
Socketํด๋์ค ์์
import java.io.BufferedOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Date;
// ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ 'ํด๋ผ์ด์ธํธ'์ ์์ค์ฝ๋.
public class SocketClientSample {
public static void main(String[] args) {
SocketClientSample sample = new SocketClientSample();
sample.sendSocketSample();
}
public void sendSocketSample() {
for (int i = 0; i < 3; i++) {
sendSocketData("I liked java at " + new Date());
}
sendSocketData("EXIT");
}
public void sendSocketData(String data) {
Socket socket = null;
try {
System.out.println("Client : Connecting");
socket = new Socket("127.0.0.1", 9999);
// IP๋ฒํธ์ ํฌํธ๋ฒํธ๋ฅผ ๊ฐ๋ Socket์์ฑ์๋ก ๊ฐ์ฒด๋ฅผ ์์ฑ ๋ฐ ์ ์ํจ.
// 127.0.0.1์ด๋ผ๋ IP๋ฒํธ๋ '๊ฐ์ ์ฅ๋น'์์ ์๋ฏธํจ. ํฌํธ๋ฒํธ 9999๋ ์๋ฒ์ชฝ์ ์ง์ ํ ํฌํธ์ ๋์ผํด์ผ ํจ.
System.out.println("Client : Connect status = " + socket.isConnected());
Thread.sleep(1000);
OutputStream stream = socket.getOutputStream();
// getOutputStream() : ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์ ๋ณด๋ด๊ธฐ ์ํด ํธ์ถํ๋ ๋ฉ์๋. OutputStream๊ฐ์ฒด๋ฅผ ๋ฆฌํดํจ.
// ๋ฆฌํด๊ฐ์ธ OutputStream์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด ์๋ฒ๋ก ์ ์กํ๋ค.
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(stream);
byte[] bytes = data.getBytes();
bufferedOutputStream.write(bytes);
System.out.println("Client : Sent data");
bufferedOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (socket != null) {
try {
socket.close();
// ๋ฐ์ด์ ๋ฅผ ์ ์กํ ํ close()๋ฅผ ์ฌ์ฉํด ์์ผ ์ฐ๊ฒฐ์ ๋ซ๋๋ค.
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
ServerSocketํด๋์ค ์์
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
// ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ '์๋ฒ'์ ์์ค์ฝ๋.
public class SocketServerSample {
public static void main(String[] args) {
SocketServerSample sample = new SocketServerSample();
sample.startServer();
}
public void startServer() {
ServerSocket server = null;
Socket client = null;
// ServerSocket์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ธฐ ์ํ ํด๋์ค์ด๋ฉฐ, ์ฃผ๋ก ์๋ฒ์์ ์ฌ์ฉํจ
// Socket์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ธฐ ์ํ ํด๋์ค์ด๋ฉฐ, ์ฃผ๋ก ํด๋ผ์ด์ธํธ์์ ์ฌ์ฉํจ
try {
server = new ServerSocket(9999);
// ํฌํธ๋ฒํธ 9999๋ฅผ ์ด์ฉํด ServerSocket ๊ฐ์ฒด ์์ฑ.
// ์ด ํ๋ก๊ทธ๋จ์์ ๋์ด ์๋ฒ๋ก ์ ๊ทผํ๋ ค๋ฉด 9999ํฌํธ๋ฅผ ์ฌ์ฉํด์ผ ํจ์ ์๋ฏธ.
while (true) {
System.out.println("Server : Waiting for request.");
client = server.accept();
// accept() : ServerSocket์ ์๋ก์ด ์์ผ ์ฐ๊ฒฐ(๋ค๋ฅธ ์๊ฒฉ ํธ์ถ)์ ๊ธฐ๋ค๋ฆฌ๋ ์ํ๋ก ๋ง๋ฆ.
// ์ฐ๊ฒฐ๋๋ฉด Socket๊ฐ์ฒด๊ฐ ๋ฆฌํด๋จ.
System.out.println("Server : Accepted.");
InputStream inputStream = client.getInputStream();
// ์ ์ํ ์๋๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ธฐ ์ํด Socketํด๋์ค์ getInputStream()์ ํธ์ถ - InputStream๊ฐ์ฒด๋ฅผ ๋ฆฌํดํจ
// *๋ฐ๋๋ก ์ ์ํ ์๋์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ํด์๋ getOutputStream()์ ํธ์ถ - OutputStream๊ฐ์ฒด๋ฅผ ๋ฆฌํด๋ฐ์ - ์ด ์คํธ๋ฆผ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํจ.
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String data = null;
StringBuilder receivedData = new StringBuilder();
while ((data = bufferedReader.readLine()) != null) {
receivedData.append(data);
}
System.out.println("Received data : " + receivedData);
bufferedReader.close();
inputStream.close();
client.close();
// close() : ๋ชจ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ๋๋ ํ Socket์ฌ์ฉ์ด ์ข
๋ฃ๋จ์ ์๋ฆผ
if (receivedData != null && "EXIT".equals(receivedData.toString())) {
System.out.println("Stop SocketServer");
break;
}
System.out.println("----------");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (server != null) {
try {
server.close();
// ๋ ์ด์ ์์ผ์์ ์ด ํ์์์ ๋ ServerSocket์ close()๋ฅผ ํธ์ถํจ
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
[Java] InetAddress ํด๋์ค
*์๋ฐ์ ์ ์ 16์ฅ์ ์ฐธ๊ณ ํ์ต๋๋ค.
InetAddress
: java.net.InetAddress
ํด๋์ค. ์๋ฐ์์ IP์ฃผ์๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด ์ ๊ณตํ๋ ํด๋์ค์ด๋ค.
InetAddress
์ ์ฃผ์ ๋ฉ์๋๋ค
static InetAddress getByName(String host)
: ๋๋ฉ์ธ๋ช (host)์ ํตํด IP์ฃผ์๋ฅผ ์ป๋๋ค.UnknownHostException
์์ธ ๋ฐ์ ๊ฐ๋ฅ - ์์ธ์ฒ๋ฆฌ ํ์.
String getHostName()
: ํธ์คํธ์ ์ด๋ฆ์ ๋ฐํํจString getHostAddress()
: ํธ์คํธ์ IP์ฃผ์๋ฅผ ๋ฐํํจbyte[] getAddress()
: IP์ฃผ์๋ฅผ byte๋ฐฐ์ด๋ก ๋ฐํํจ- ์์๋ก ๋ฐํ๋๋ ๊ฐ์๋ 256์ ๋ํ๋ฉด ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ IP์ฃผ์ํ์์ด ๋จ.
static InetAddress getLocalHost()
: ์ง์ญํธ์คํธ์ IP์ฃผ์๋ฅผ ๋ฐํํจ.getHostName()
์ผ๋ก ํธ์คํธ๋ช ์,getHostAddress()
๋ก ํธ์คํธ IP์ฃผ์๋ฅผ ์์๋ผ ์ ์์UnknownHostException
์์ธ ๋ฐ์ ๊ฐ๋ฅ - ์์ธ์ฒ๋ฆฌ ํ์.
static InetAddress[] getAllByName(String host)
: ๋๋ฉ์ธ๋ช (host)์ ์ง์ ๋ ๋ชจ๋ ํธ์คํธ์ IP์ฃผ์๋ฅผ ๋ฐฐ์ด์ ๋ด์ ๋ฐํํ๋ค.
ํ๋์ ๋๋ฉ์ธ๋ช ์ ์ฌ๋ฌ IP์ฃผ์๊ฐ ๋งตํ๋ ๊ฒฝ์ฐ, ๋ชจ๋ IP์ฃผ์๋ฅผ ์ป์ ์ ์๋ ๋ฉ์๋UnknownHostException
์์ธ ๋ฐ์ ๊ฐ๋ฅ - ์์ธ์ฒ๋ฆฌ ํ์.
URL
*์๋ฐ์ ์ ์ 16์ฅ์ ์ฐธ๊ณ ํ์ต๋๋ค.
URL (Uniform Resource Locator)
: ์ธํฐ๋ท์์ ํ์ผ ์ฃผ์.
: ์ธํฐ๋ท์ ์กด์ฌํ๋ ์ฌ๋ฌ ์๋ฒ๋ค์ด ์ ๊ณตํ๋ ์์์ ์ ๊ทผํ ์ ์๋ ์ฃผ์๋ฅผ ํํํ๊ธฐ ์ํ ๊ฒ.
ํ๋กํ ์ฝ://ํธ์คํธ๋ช
:ํฌํธ๋ฒํธ/๊ฒฝ๋ก๋ช
/ํ์ผ๋ช
?์ฟผ๋ฆฌ์คํธ๋ง#์ฐธ์กฐ
์ ํ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
*ํฌํธ๋ฒํธ, ์ฟผ๋ฆฌ์คํธ๋ง, ์ฐธ์กฐ๋ ์๋ต๊ฐ๋ฅ
- ํ๋กํ ์ฝ : ์์์ ์ ๊ทผํ๊ธฐ ์ํด ์๋ฒ์ ํต์ ํ ๋ ์ฌ์ฉ๋๋ ํต์ ๊ท์ฝ (http/https)
- ํธ์คํธ๋ช
: ์์์ ์ ๊ณตํ๋ ์๋ฒ์ ์ด๋ฆ (
www.google.co.kr
) - ํฌํธ๋ฒํธ : ํต์ ์ ์ฌ์ฉ๋๋ ์๋ฒ์ ํฌํธ๋ฒํธ
- HTTPํ๋กํ ์ฝ์ ๊ธฐ๋ณธ ํฌํธ๋ฒํธ๋ 80์ด๋ฉฐ, URL์์ ํฌํธ๋ฅผ ์๋ตํ๋ ๊ฒฝ์ฐ 80๋ฒ ํฌํธ์ธ ๊ฒ์ผ๋ก ๊ฐ์ฃผํ๋ค.
- ๊ฐ ํ๋กํ ์ฝ์ ๋ฐ๋ผ ์ฌ์ฉํ๋ ํฌํธ๋ฒํธ๊ฐ ๋ค๋ฅด๋ฉฐ, ์๋ตํ๋ฉด ๊ฐ ํ๋กํ ์ฝ์ ๊ธฐ๋ณธํฌํธ๊ฐ ์ฌ์ฉ๋๋ค.
- ๊ฒฝ๋ก๋ช : ์ ๊ทผํ๋ ค๋ ์์์ด ์ ์ฅ๋ ์๋ฒ์์ ์์น
- ํ์ผ๋ช : ์ ๊ทผํ๋ ค๋ ์์์ ์ด๋ฆ
- ์ฟผ๋ฆฌ : URL์์
?
์ดํ์ ๋ถ๋ถ - ์ฐธ์กฐ(anchor) : URL์์
#
์ดํ์ ๋ถ๋ถ
[Java] URL ํด๋์ค
URL
: ์๋ฐ์์ URL์ ๋ค๋ฃจ๊ธฐ ์ํด ์ ๊ณตํ๋ ํด๋์ค. java.net.URL
URL
์ ์์ฑ์๋ค
URL(String spec)
URL(String protocol, String host, String file)
URL(String protocol, String host, int port, String file)
URL url = new URL("https://www.google.co.kr")
์ ๊ฐ์ด ์ฌ์ฉํด URL๊ฐ์ฒด๋ฅผ ์์ฑํจ.
URL
์ ์ฃผ์ ๋ฉ์๋๋ค
URL ํ์ : ํ๋กํ ์ฝ://ํธ์คํธ๋ช
:ํฌํธ๋ฒํธ/๊ฒฝ๋ก๋ช
/ํ์ผ๋ช
?์ฟผ๋ฆฌ์คํธ๋ง#์ฐธ์กฐ
*URL url = new URL("https://www.google.co.kr:80/search/๊ตฌ๊ธ?q=๊ตฌ๊ธ&oq=๊ตฌ๊ธ#index1")
์ผ ๋.
String getAuthority()
: ํธ์คํธ๋ช ๊ณผ ํฌํธ๋ฅผ ๋ฌธ์์ด๋ก ๋ฐํํจ (www.google.co.kr:80
)Object getContent()
: URL์ Content๊ฐ์ฒด๋ฅผ ๋ฐํํจint getDefaultPort()
: URL์ ๊ธฐ๋ณธ ํฌํธ๋ฅผ ๋ฐํํจ (http
๋80
)int getPort()
: ํฌํธ๋ฅผ ๋ฐํํจ (80
)String getFile()
: ํ์ผ๋ช ์ ๋ฐํํจ (search/๊ตฌ๊ธ?q=๊ตฌ๊ธ&oq=๊ตฌ๊ธ
)String getHost()
: ํธ์คํธ๋ช ์ ๋ฐํํจ (www.google.co.kr
)String getProtocol()
: ํ๋กํ ์ฝ์ ๋ฐํํจ (https
)String getQuery()
: ์ฟผ๋ฆฌ๋ฅผ ๋ฐํํจ (q=๊ตฌ๊ธ&oq=๊ตฌ๊ธ
)String getRef()
: ์ฐธ์กฐ(anchor)๋ฅผ ๋ฐํํจ (index1
)String getUserInfo()
: ์ฌ์ฉ์์ ๋ณด๋ฅผ ๋ฐํํจString toExternalForm()
: URL์ ๋ฌธ์์ด๋ก ๋ณํํ์ฌ ๋ฐํํจ (https://www.google.co.kr:80/search/๊ตฌ๊ธ?q=๊ตฌ๊ธ&oq=๊ตฌ๊ธ#index1
)URI toURI()
: URL์ URI๋ก ๋ณํํ์ฌ ๋ฐํํจ (https://www.google.co.kr:80/search/๊ตฌ๊ธ?q=๊ตฌ๊ธ&oq=๊ตฌ๊ธ#index1
)boolean sameFile(URL otherURL)
: ๋ URL์ด ์๋ก ๊ฐ์์ง ์๋ ค์คURLConnection openConnection()
: URL๊ณผ ์ฐ๊ฒฐ๋ URLConnection์ ๋ฐํํจInputStream openStream()
: URL์ ์ฐ๊ฒฐํด์ InputStream์ ๋ฐํํจ.
(openConnection()
์ ํธ์ถํด URLConnection์ ์ป์ ๋ค์, ๋ค์getInputStream()
์ ํธ์ถํ ๊ฒ๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ)
[Java] URLConnection
URLConnection
ํด๋์ค
: ์ดํ๋ฆฌ์ผ์ด์ ๊ณผ URL๊ฐ์ ํต์ ์ฐ๊ฒฐ์ ๋ํ๋ด๋ ํด๋์ค์ ์ต์์ ํด๋์ค. ์ถ์ํด๋์ค์.
์ฐ๊ฒฐํ๋ ค๋ ์์์ ์ ๊ทผํ๊ณ , ์ฝ๊ณ , ์ธ ์ ์๊ฒ ํด ์ฃผ๋ ํด๋์ค.
URLConnection
์ ์์๋ฐ์ ๊ตฌํํ ํด๋์ค
:HttpURLConnection
๊ณผJarURLConnection
์ด ์์- URL์ ํ๋กํ ์ฝ์ด http๋ผ๋ฉด, URLํด๋์ค์
openConnection()
๋ฉ์๋๋HttpURLConnection
์ ๋ฐํํจ.
URLConnection
์ ์ฃผ์ ๋ฉ์๋
boolean getAllowUserInteraction()
: UserInteraction์ ํ์ฉ์ฌ๋ถ๋ฅผ ๋ฐํํจint getConnectTimeout()
: ์ฐ๊ฒฐ์ข ๋ฃ์๊ฐ์ 1/1000์ด๋ก ๋ฐํํจObject getContent()
: content๊ฐ์ฒด๋ฅผ ๋ฐํํจString getContentEncoding()
: content์ ์ธ์ฝ๋ฉ์ ๋ฐํํจint getContentLength()
: content์ ํฌ๊ธฐ๋ฅผ ๋ฐํํจString getContentType()
: content์ type์ ๋ฐํํจlong getDate()
: header์ dateํ๋์ ๊ฐ์ ๋ฐํํจboolean getDefaultAllowUserInteraction()
: defaultAllowUserInteraction์ ๊ฐ์ ๋ฐํํจboolean getDefaultUseCaches()
: useCaches์ ๋ํดํธ ๊ฐ์ ์ป๋๋คboolean getDoInput()
,boolean getDoOutput()
: doInput / doOutput์ ํ๋๊ฐ์ ์ป๋๋คlong getExpiration()
: URL์ ๋ง๋ฃ์ผ์๋ฅผ ์ป๋๋ค (1/1000์ด ๋จ์)Map getHeaderFields()
: ํค๋์ ๋ชจ๋ ํ๋์ ๊ฐ์ด ์ ์ฅ๋ Map์ ๋ฐํํจlong getIfModifiedSince()
: ifModifiedSince(๋ณ๊ฒฝ์ฌ๋ถ) ํ๋์ ๊ฐ์ ๋ฐํํจint getReadTimeout()
: ์ฝ๊ธฐ์ ํ์๊ฐ์ ๊ฐ์ ๋ฐํํจ (1/1000์ด ๋จ์)URL getURL()
: URLConnection์ URL์ ๋ฐํํจboolean getUseCaches()
: ์บ์ฌ์ ์ฌ์ฉ์ฌ๋ถ๋ฅผ ๋ฐํํจ
2/1 ์ค๋์ ์๋จ์ด
authority (n) ๊ถํ
authorize (v) ๊ถํ์ ๋ถ์ฌํ๋ค. ์ธ๊ฐํ๋ค.
cache (n) (์ปดํจํฐ)์บ์ / ์๋์ฒ
uniform (a) ํต์ผ๋. ๊ท ์ผํ.
locator (n) ์์น ํ์ง๊ธฐ
certificate (n) ์๊ฒฉ(์ฆ) / ์ฆ๋ช ์
encryption (n) ์ํธํ
decryption (n) ๋ณตํธํ
cryptography (n) ์ํธํ
symmetric (a) ๋์นญ์.
asymmetric (a) ๋น๋์นญ์.