์ฒ์ OSI 7๊ณ์ธต์ด๋ TCP/IP ํ๋กํ ์ฝ์ ๊ณต๋ถํ๋ค ๋ณด๋ฉด ๋ฐ์ดํฐ๊ฐ ์ ์ก๋๋ ํฐ ํ๋ฆ์ด ๋ฌด์์ธ์ง ์ดํดํ๊ฒ ๋๋ค. ์ ์ก ํ๋ฆ์ ์์ฃผ ๊ฐ๋จํ๋ค. ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ์์ฒญ์ด ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์ ์์์ผ๋ก ์ ์ก๊ณ์ธต, ์ธํฐ๋ท ๊ณ์ธต, ๋คํธ์ํฌ ์ก์ธ์ค ๊ณ์ธต์ ๊ฑฐ์ณ์ ๋ฐ์ดํฐ ๋ฉ์ด๋ฆฌ๋ก ๋ง๋ค์ด์ง๊ณ , ์ด๋ฅผ ์๋ ์๋ฒ์ ๋ณด๋ด๋ฉด ๊ฑฐ๊พธ๋ก ๋คํธ์ํฌ ์ก์ธ์ค → ์ธํฐ๋ท → ์ ์ก → ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์ ๊ฑฐ์น๋ฉด์ ๋ฐ์ดํฐ ๋ฉ์ด๋ฆฌ์ ํฌ์ฅ์ ํ๊ฒ ๋๋ค.
์ด ํ๋ฆ์ ๋ณด๋ฉด์ ๊ฐ์ฅ ๊ถ๊ธํ๋ ๊ฑด "๊ฐ ๊ณ์ธต ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฃผ๊ณ ๋ฐ๋์ง"์๋ค. ์ ํํ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์์ ์ ์ก ๊ณ์ธต์ผ๋ก ํน์ ์ ์ก ๊ณ์ธต์์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต์ผ๋ก ์ ๋ณด๋ฅผ ์ด๋ป๊ฒ ๋ณด๋ด์ฃผ๋์ง๊ฐ ๊ถ๊ธํ๋ค.
ํ๋์ ์๋ฒ์ A, B, C ๋ฑ ์ฌ๋ฌ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ํ๋๊ณ ์์ ์ ์๋๋ฐ A ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์์ฒญ์ ์ด๋ ํ ํฌํธ ๋ฒํธ๋ก ๋ค์ด์ค๋์ง ์๋ค(์ปดํจํฐ ํน์ ํ๋ก๊ทธ๋จ)๊ฐ ์ด๋ป๊ฒ ์์ง? ํ๋์ ์๋ฒ์ ํ๋์ ์ ํ๋ฆฌ์ผ์ด์ ๋ง ์ํ๋๋ค๊ณ ํ๋๋ผ๋ ์ด์ฐ๋๋ ์ง์ ๋ ํฌํธ๋ฒํธ๋ก ๋ค์ด์จ ์์ฒญ๋ง ๋ฐ์์ผ ํ ํ ๋ฐ ๋์ฒด ์ ํ๋ฆฌ์ผ์ด์ ๋ค์ ์๊ธฐ์ ์ฐ๋๋ ํฌํธ๋ฒํธ๊ฐ ๋ญ์ง ์ด๋ป๊ฒ ์๊ณ ์๋ต์ ์ฃผ๋ ๊ฑฐ์ง? ์ถ์๋ค.
๊ทธ๋ ๊ฒ ๋ฉฐ์น ์ ๊ณ์ ์ฌ๋ฌ ํค์๋๋ก ๊ฒ์ํ๋ค๊ฐ ์ธ๊ตญ ์ฌ์ดํธ์์ Socket์ด๋ผ๋ ๋จ์ด๋ฅผ ์ธ๊ธํ ๊ฑธ ์ฐ์ฐํ ๋ดค๋ค. ํน์๋ ํ๋ ๋ง์์ ์ฐพ์๋ณด๋๊น ๋ด๊ฐ ๊ถ๊ธํดํ ๋ถ๋ถ์ ๋ด๋นํ๋ ๊ฒ ๋ฐ๋ก TCP ์์ผ์ด์๋ค. ์ด์ฐ๋ ํํํ๋์ง ใ ใ ,,,์์ผ์ด ๋ญ์ง ๋์ ์ถฉ๋ง ์๊ณ ์๊ณ , ๋ณดํต ์คํ๋ง๋ถํธ๋ก ๊ฐ๋ฐ์ ํ๋๊น ์ด๋ฌํ ์์ง๊ตฌ๋ ํ ์ค์ ๋ค์ ์๊ฐํ ํ์๊ฐ ์์๊ธฐ ๋๋ฌธ์ ์ด๋ ๊ฒ ๋ฌด์งํ๋ ๊ฒ ๊ฐ๋ค.
์ฌํผ ์์ฝํ์๋ฉด TCP ์์ผ์ ํด๋ผ์ด์ธํธ-์๋ฒ ๊ฐ ํต์ ์์ ์ ์ก๊ณ์ธต๊ณผ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต ์ฌ์ด์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด์ฃผ๋ ์ฐฝ๊ตฌ ์ญํ ์ ํ๋ค.
์ฐธ๊ณ ๋ก ์๋ ์์ ์๋ ์ ํ ์๊ด์์ง๋ง
HTTP ํ๋กํ ์ฝ์ ์ค์ํ ํ๋ก๊ทธ๋จ๋ค๋ ๊ฒฐ๊ตญ ์์ผ์ ์ด์ฉํ ํต์ ์ ํ๊ณ ์๋ค. ์ฌ์ค 100ํ๋ก ์์ ์ ์๋๋ฐ, ๊ฒฐ๊ตญ HTTP๋ TCP ์์์ ์๋ํ๋ ํ๋กํ ์ฝ์ด๋ฉด TCP ์์ผ์ ์ฌ์ฉํ ์ ๋ฐ์ ์์ง ์์๊น..?
๋ด๊ฐ ์ข ํท๊ฐ๋ ธ๋ ๋ถ๋ถ์ HTTP์ ํน์ฑ์ผ๋ก connectionless์ stateless๋ฅผ ๊ผฝ๋๋ฐ, TCP๋ connection oriented๋ผ์ TCP ์์ผ ํต์ ๊ณผ HTTP ์ ํ๋ฆฌ์ผ์ด์ ๋ค์ ๋ญ๊ฐ ์ ๋ง๋๋ค ์๊ฐํ๋ค. ๊ทธ๋ฐ๋ฐ ํต๋ก(์์ผ ํต์ )๋ ์ผ๋จ ๋ซ์ด๋๊ณ , ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋(HTTP) ๋งค๊ฐ์๋ฅผ ํ๋ฒ ์ฐ๊ณ ๋ฒ๋ฆฌ๋ ๊ฒ์ด๋ผ ์๊ฐํ๋ฉด ๋ ๊ทธ๋ ๊ฒ ์ด์ํ์ง ์์์ใ ,,,์ผ๋จ ๊ทธ๋ ๊ฒ ์ดํดํ๊ธฐ๋ก ํ๋ค.
๋๋ ๋น์ทํ ๊ณ ๋ฏผ์ ํ ์ฌ๋์ด ์๋๋ฐ, ๋ต๋ณ์์ ๋ง์ ๋ฐฑํ๋ก ์ดํด๋ ๋ชปํ๊ฒ ์ง๋ง ์ผ์ถ ์ด๋ค ๋๋์ธ์ง๋ ์ ๊ฒ ๊ฐ๋ค.
ํด๋์ค ServerSocket : ์๋ฒ ์ธก ์์ผ
์๋ฒ์์๋ ํน์ ๋ฒํธ์ ํฌํธ๋ฅผ ์ด์ด๋๊ณ , ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ด์ผ ํ๋ค. ์ด ์ถ์ ๊ตฌ์ ์ญํ ์ ํ๋ ํด๋์ค๊ฐ ServerSocket์ด๋ค. ์์ฑ์ ์๋์ ๊ฐ์ด new ServerSocket(ํฌํธ๋ฒํธ)๋ก ๊ฐ๋จํ ํ ์ ์๋ค. ServerSocket ํด๋์ค ๋ด๋ถ์์ ๊ฐ์ฒด ์์ฑ ์ bind() ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ์๊ธฐ ๋๋ฌธ์, ๋ณ๋๋ก ๋ฐ์ธ๋ฉ ์์ ์ ํ ํ์๋ ์๋ค. ์ฐธ๊ณ ๋ก 5000๋ฒ ํฌํธ๋ก ์์ฒญ์ด ๋ค์ด์์ ๋, ์ด ์์ฒญ ์ ๋ณด๋ฅผ A ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด๋ผ ์ ์๋๋ก A์ ํ๋ฆฌ์ผ์ด์ ๊ณผ 5000๋ฒ ํฌํธ ๋ฅผ ๋งคํํ๋ ๊ฒ์ด ๋ฐ์ธ๋ฉ ์์ ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ฝ์ 0์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ ฅํ๋ฉด ๋๋ค์ผ๋ก ํฌํธ๋ฒํธ๋ฅผ ์ง์ ๋ฐ๊ฒ ๋๋๋ฐ, ํด๋ผ์ด์ธํธ ์ธก์ด๋ฉด ๋ชฐ๋ผ๋ ์๋ฒ ์ธก์ ํฌํธ ๋ฒํธ๋ฅผ ๋๋คํ๊ฒ ์ง์ ํ ์ผ์ด ์์๊น ์ถ๋ค.
์ค์ ๋ก ํด๋น ํฌํธ์ ์ฐ๊ฒฐ์์ฒญ์ด ๋ค์ด์์ ๋, ์ด๋ฅผ ์๋ฝํ๋ ๋ฉ์๋๋ accept() ๋ฉ์๋๋ค. ์ผ๋จ accept() ๋ฉ์๋๋ฅผ ์คํํ๊ฒ ๋๋ฉด, ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ฒฐ์ ์์ฒญํ๊ธฐ ์ ๊น์ง๋ ๋ธ๋กํน๋๋ค. ์๋ ์ฝ๋๋ฅผ ์คํํ๋ฉด serverSocket.accept() ์ดํ์ ์ฝ๋๋ ์ถ๋ ฅ๋์ง ์๋๋ค. ํ ๋ง๋๋ก ์ฐ๊ฒฐ์์ฒญ์ด ๋ค์ด์ฌ ๋๊น์ง ๋๊ธฐํ๊ณ ์๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
ํด๋์ค Socket : ํด๋ผ์ด์ธํธ ์ธก ์์ผ
์๋ฒ ์ธก ์์ผ์ด ํน์ ๋ฒํธ(ex.5000)์ ํฌํธ ๋ฌธ์ ์งํค๊ณ ์๋ ๋ฌธ์ง๊ธฐ๋ผ๋ฉด, Socket ํด๋์ค๋ ๋ชฉ์ ์ง ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ณด๋ถ์์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
ServerSocket๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก new Socket(์๋ฒ IP ์ฃผ์, ์๋ฒ ํฌํธ ๋ฒํธ)๋ฅผ ํตํด ์์ผ ์์ฑ๊ณผ ๋์์ ์ฐ๊ฒฐ ์์ฒญ์ ํ ์ ์๋ค. ๋ง์ฝ ์์ผ๋ง ์์ฑํ๊ณ ์ฐ๊ฒฐ ์์ฒญ์ ๋์ค์ ํ๊ณ ์ถ๋ค๋ฉด connect() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. ๋์ ์ด๋ ํ๋ผ๋ฏธํฐ๋ก InetSocketAddress ๊ฐ์ฒด๋ฅผ ๋๊ฒจ์ฃผ์ด์ผ ํ๋ค. ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด Socket ํด๋์ค์ ๋ด๋ถ ์ฝ๋์์ ํด๋น ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
// ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ : ์์ผ ์์ฑ๊ณผ ๋์์ ์๋ฒ๋ก ์ฐ๊ฒฐ ์์ฒญ
Socket socket = new Socket("localhost", 5001);
// ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ : ์์ผ ์์ฑ ์ดํ์ ๋ฐ๋ก ์ฐ๊ฒฐ ์์ฒญ
Socket socket = new Socket();
socket.connect(new InetSocketAddress("localhost", 5001);
ServerSocket๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก Socket๋ connect() ๋ฉ์๋๋ฅผ ์คํํ๊ฒ ๋๋ฉด, ์๋ฒ์ ์ฐ๊ฒฐ์ด ๋งบ์ด์ง๊ธฐ ์ ๊น์ง๋ ๋ธ๋กํน๋๋ค. ServerSocket์ฒ๋ผ connect() ์ดํ์ ์ฝ๋๊ฐ ์คํ๋์ง ์๋ ๊ฑธ ํ ์คํธํด๋ณด๊ณ ์ถ์๋ฐ, ๊ฝค ๋น ๋ฅธ ์๊ฐ ์์ Connection refused ์๋ฌ ๋ฉ์ธ์ง๊ฐ ๋ ์ ํ์ธ์ ๋ชปํ๋ค.
ServerSocket๊ณผ Socket์ ํตํ ํต์
์๋ฒ ์์ผ๊ณผ ํด๋ผ์ด์ธํธ ์์ผ์ ๋ชจ๋ ์ด์ฉํด์ ์ค์ ๋ก ์ฐ๊ฒฐ์ด ๋งบ์ด์ง๋์ง ๊ฐ๋จํ ํ์ธํด๋ดค๋ค.
์๋ฒ ์์ผ์ ํฌํธ 50001๋ฒ์ ๋ง์ถฐ์ ์ด์ด๋๊ณ , ํด๋ผ์ด์ธํธ ์์ผ์ ์๋ฒ์ 50001๋ฒ ํฌํธ๋ก ์ฐ๊ฒฐ ์์ฒญํ๋๋ก ์ค์ ํด๋์๋ค. ์๋ฒ ํ๋ก๊ทธ๋จ๋ถํฐ ๋จผ์ ์คํํ ๋ค์์ ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋จ์ ์คํํ๋ค. ์ ์ฐ๊ฒฐ๋๋ค!
Server์ธก
Client์ธก
๊ฒฐ๊ณผ
์์ผ์ ๋ํด ๋ ์๊ณ ์ถ๋ค๋ฉด
- https://manzanit0.github.io/networks/2018/11/09/sockets-explained.html
- http://jkkang.net/unix/netprg/chap2/net2_1.html
- https://on1ystar.github.io/socket%20programming/2021/03/16/socket-1/
'Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ดํํฐ๋ธ ์๋ฐ] ์์ดํ 4. ์ธ์คํด์คํ๋ฅผ ๋ง์ผ๋ ค๊ฑฐ๋ private ์์ฑ์๋ฅผ ์ฌ์ฉํ๋ผ (0) | 2022.03.27 |
---|---|
[์ฑํ ํ๋ก๊ทธ๋จ] ํด๋์ค InetAddress (0) | 2021.08.15 |