๐ก ์๋ฒ ์ธก ๊ธฐ๋ณธ ์ฝ๋ ์์ฑ์ ๋ชฉ์
๋คํธ์ํฌ ํ๋ก๊ทธ๋๋ฐ์ ์์ํ๋ฉด์ ๊ฐ์ฅ ๋จผ์ ๋ฐฐ์์ผ ํ ๊ฒ์ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ํต์ ์ ๋๋ค.
์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ์๋ค์ด๊ณ , ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ด๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์ญํ ์ ํฉ๋๋ค.
์๋ฒ ์ธก ๊ธฐ๋ณธ ์ฝ๋๋ฅผ ์์ฑ์ ํด๋ณด๋ ์ด์ ?
๋คํธ์ํฌ ํต์ ์ ๊ธฐ์ด ์ดํด
์๋ฒ๋ ๋คํธ์ํฌ ํต์ ์ ํต์ฌ ์ญํ ์ ํ๋ค.
์๋ฒ ์ธก ์ฝ๋๋ฅผ ์์ฑํจ์ผ๋ก์จ ์ฐ๋ฆฌ๋ ๋คํธ์ํฌ ํต์ ์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ดํดํ ์ ์๋ค.
- ์๋ฒ ์์ผ(ServerSocket) ์์ฑ: ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ๊ธฐ๋ค๋ฆฌ๋ ์์ผ์ด๋ค.
- ํฌํธ ๋ฐ์ธ๋ฉ: ํน์ ํฌํธ ๋ฒํธ์ ์๋ฒ ์์ผ์ ๊ฒฐํฉํ์ฌ ์ธ๋ถ์์ ์ ๊ทผํ ์ ์๋๋ก ํ๋ค.
- ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ ์๋ฝ: ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ฐ๊ฒฐํ ์ ์๋๋ก ๋๊ธฐํ๊ณ , ์ฐ๊ฒฐ ์์ฒญ์ ๋ฐ์๋ค์ธ๋ค.
๋ฐ์ดํฐ ์ก์์ ์ดํด
์๋ฒ ์ธก ์ฝ๋์์ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ ์ด๋ฅผ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์ ๋ฐฐ์ด๋ค.
์ด๋ ๋คํธ์ํฌ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ ๊ธฐ๋ฅ ์ค ํ๋์ด๋ค.
- ์ ๋ ฅ ์คํธ๋ฆผ(Input Stream): ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด๋ค์ด๋ ๋ฐฉ๋ฒ์ ๋๋ค.
- ๋ฐ์ดํฐ ์ฒ๋ฆฌ: ์์ ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ์ถ๋ ฅํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋๋ค.
์ค๋ฅ ์ฒ๋ฆฌ ๋ฐ ๋๋ฒ๊น
์๋ฒ ์ธก ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ๋ฐ์ํ ์ ์๋ ๋ค์ํ ์ค๋ฅ๋ฅผ ๊ฒฝํํ๊ณ , ์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ๊ฒ ๋๋ค.
- ์์ธ ์ฒ๋ฆฌ(Exception Handling): ๋คํธ์ํฌ ํต์ ์์ ๋ฐ์ํ ์ ์๋ ์์ธ ์ํฉ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋๋ค.
- ๋๋ฒ๊น (Debugging): ์ฝ๋์ ๋ฌธ์ ๋ฅผ ํ์ ํ๊ณ ์์ ํ๋ ๋ฅ๋ ฅ์ ํค์๋๋ค.
์๋ฒ์ธก ํ๋ก๊ทธ๋จ ๋ง๋ค๊ธฐ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerFile {
public static void main(String[] args) {
// ์ค๋น๋ฌผ
// 1. ์๋ฒ ์์ผ์ด ํ์ํ๋ค
// 2. ํฌํธ ๋ฒํธ๊ฐ ํ์ํ๋ค ( 0~ 65535 ๊น์ง ์กด์ฌ)
// 2.1 ์ ์๋ ค์ง ํฌํธ ๋ฒํธ : ์ฃผ๋ก ์์คํ
๋ ๋ฒ - 0 ~ 1023 ๊น์ง ์ฌ์ฉ
// 2.2 ๋ฑ๋ก ๊ฐ๋ฅํ๋ ํ ๋ : 1024 ~ 49151 ๊น์ง
// 2.3 ๋์ / ์ฌ์ค ํฌํธ๋ฒํธ - ๊ทธ ์ธ ์์ ์ฌ์ฉ์ ์ํด ํ ๋น ๋๋ค.
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(5001);
System.out.println("์๋ฒ๋ฅผ ์์ ํฉ๋๋ค - ํฌํธ๋ฒํธ : 5001 ");
Socket socket = serverSocket.accept(); // while -->
System.out.println(">>> ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ฒฐ ํ์์ต๋๋ค. <<<");
// ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ ๋ฐ๊ธฐ ์ํด์๋ ๋ญ๊ฐ ํ์ํ๋ค? --> ์คํธ๋ฆผ์ด ํ๋ค.
InputStream input = socket.getInputStream();
// ๋ฌธ์ ๊ธฐ๋ฐ ์คํธ๋ฆผ -> ๊ธฐ๋ฅ์ ํ์ฅ
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
// ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ํ์๊ฐ ํ์ ํ๋ค
String message = reader.readLine();
System.out.println("ํด๋ผ์ด์ธํธ ์ธก ๋ฉ์ธ์ง ์ ๋ฌ ๋ฐ์ : " + message);
socket.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (serverSocket != null) {
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
์คํ ๊ฒฐ๊ณผ________
ํฌํธ ๋ฒํธ์ ๊ฐ์
์ผ๋ฐ ์ปดํจํฐ์์๋ ํฌํธ ๋ฒํธ์ ๋ฒ์๊ฐ 0๋ถํฐ 65535๊น์ง ์กด์ฌํ๋ค.
์ด๋ ์ด 65,536๊ฐ์ ํฌํธ ๋ฒํธ๋ฅผ ์๋ฏธํ๋ค. ์ด ํฌํธ ๋ฒํธ๋ค์ ์ฌ๋ฌ ๊ฐ์ง ๋ชฉ์ ์ ๋ฐ๋ผ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ๋ถ๋๋ค.
- ์ ์๋ ค์ง ํฌํธ ๋ฒํธ(Well-known Ports): 0๋ถํฐ 1023๊น์ง (์ฃผ๋ก ์์คํ ๋ ๋ฒจ์ ์๋น์ค์ ์ฌ์ฉ)
- ๋ฑ๋ก๋ ํฌํธ ๋ฒํธ(Registered Ports): 1024๋ถํฐ 49151๊น์ง (ํน์ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ์ฌ์ฉ์ ํ๋ก์ธ์ค์ ์ฌ์ฉ)
- ๋์ /์ฌ์ค ํฌํธ ๋ฒํธ(Dynamic/Private Ports): 49152๋ถํฐ 65535๊น์ง (์์ ์ฌ์ฉ์ ์ํด ๋์ ์ผ๋ก ํ ๋น)
์ ์๋ ค์ง ํฌํธ ๋ฒํธ(Well-known Ports)
์ ์๋ ค์ง ํฌํธ ๋ฒํธ๋ IANA(Internet Assigned Numbers Authority)์์ ํ ๋นํ๊ณ ๊ด๋ฆฌํ๋ฉฐ, ์ฃผ๋ก ํ์คํ๋ ์ธํฐ๋ท ์๋น์ค์ ์ฌ์ฉ๋๋ค. ๋ช ๊ฐ์ง ์ฃผ์ ํฌํธ ๋ฒํธ์ ๊ทธ ์ฌ์ฉ ์ฉ๋๋ ๋ค์๊ณผ ๊ฐ๋ค:
- ํฌํธ 20, 21: FTP(File Transfer Protocol)
- ํฌํธ 20: ๋ฐ์ดํฐ ์ ์ก์ฉ
- ํฌํธ 21: ์ ์ด ๋ช ๋ น์ฉ
- ํฌํธ 22: SSH(Secure Shell)
- ์๊ฒฉ ๋ก๊ทธ์ธ ๋ฐ ๋ค๋ฅธ ๋คํธ์ํฌ ์๋น์ค๋ฅผ ์ํ ์ํธํ๋ ํต์
- ํฌํธ 23: Telnet
- ์๊ฒฉ ๋ก๊ทธ์ธ ์๋น์ค (๋ณด์์ฑ์ด ๋จ์ด์ ธ ํ์ฌ๋ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์์)
- ํฌํธ 25: SMTP(Simple Mail Transfer Protocol)
- ์ด๋ฉ์ผ ์ ์ก
- ํฌํธ 53: DNS(Domain Name System)
- ๋๋ฉ์ธ ์ด๋ฆ์ IP ์ฃผ์๋ก ๋ณํ
- ํฌํธ 80: HTTP(Hypertext Transfer Protocol)
- ์น ๋ธ๋ผ์ฐ์ง
- ํฌํธ 110: POP3(Post Office Protocol version 3)
- ์ด๋ฉ์ผ ์์
- ํฌํธ 143: IMAP(Internet Message Access Protocol)
- ์ด๋ฉ์ผ ์์ ๋ฐ ๊ด๋ฆฌ
- ํฌํธ 443: HTTPS(HTTP Secure)
- ๋ณด์ ์น ๋ธ๋ผ์ฐ์ง (SSL/TLS ์ฌ์ฉ)
- ํฌํธ 3389: RDP(Remote Desktop Protocol)
- ์๊ฒฉ ๋ฐ์คํฌํฑ ์ ์
ํฌํธ ๋ฒํธ์ ์ฌ์ฉ ์
๊ฐ ํฌํธ ๋ฒํธ๋ ํน์ ๋คํธ์ํฌ ์๋น์ค๋ฅผ ๋ํ๋ด๋ฉฐ, ์๋ฒ๊ฐ ํน์ ์๋น์ค์ ๋ํด ๋๊ธฐํ๊ณ ์๋ ํฌํธ ๋ฒํธ๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ์ ํต์ ํ๋ค.
์๋ฅผ ๋ค์ด, ์น ์๋ฒ๋ ์ผ๋ฐ์ ์ผ๋ก ํฌํธ 80(HTTP) ๋๋ ํฌํธ 443(HTTPS)์ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋๊ธฐํ๋ค. ์ด๋ฉ์ผ ์๋ฒ๋ ํฌํธ 25(SMTP), 110(POP3), ๋๋ 143(IMAP) ๋ฑ์ ์ฌ์ฉํ์ฌ ์ด๋ฉ์ผ ์ก์์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ค.
ํฌํธ ๋ฒํธ์ ํ ๋น
- ์ด์ ์ฒด์ ์ ๋คํธ์ํฌ ์ ํ๋ฆฌ์ผ์ด์ : ์ด์ ์ฒด์ ๋ ํฌํธ ๋ฒํธ๋ฅผ ๋คํธ์ํฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ๋นํ์ฌ ํต์ ์ด ์ํํ ์ด๋ฃจ์ด์ง๋๋ก ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์น ์๋ฒ์ ์ฐ๊ฒฐํ ๋ ์์๋ก ํ ๋น๋ ๋์ ํฌํธ๋ฅผ ์ฌ์ฉํ์ฌ ํต์ ํฉ๋๋ค.
- ํฌํธ ํฌ์๋ฉ: ๋ผ์ฐํฐ์์ ํน์ ํฌํธ ๋ฒํธ๋ฅผ ๋ด๋ถ ๋คํธ์ํฌ์ ํน์ ์ฅ์น๋ก ์ ๋ฌํ์ฌ ์ธ๋ถ์์ ๋ด๋ถ ๋คํธ์ํฌ์ ์๋น์ค์ ์ ๊ทผํ ์ ์๊ฒ ํฉ๋๋ค.
์์ฝ
์ผ๋ฐ ์ปดํจํฐ์์๋ ์ด 65,536๊ฐ์ ํฌํธ ๋ฒํธ๊ฐ ์์ผ๋ฉฐ, ์ด๋ค์ ์ ์๋ ค์ง ํฌํธ ๋ฒํธ, ๋ฑ๋ก๋ ํฌํธ ๋ฒํธ, ๋์ /์ฌ์ค ํฌํธ ๋ฒํธ๋ก ๊ตฌ๋ถ๋๋ค. ์ ์๋ ค์ง ํฌํธ ๋ฒํธ๋ ํ์คํ๋ ์ธํฐ๋ท ์๋น์ค์ ์ฌ์ฉ๋๋ฉฐ, ๊ฐ ํฌํธ ๋ฒํธ๋ ํน์ ๋คํธ์ํฌ ์๋น์ค๋ฅผ ๋ํ๋ธ๋ค. ์ด๋ฅผ ํตํด ๋คํธ์ํฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ก ๊ฐ์ ํต์ ์ ์ํํ๊ฒ ํ ์ ์๋ค.
'JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] 1:1 ์๋ฐฉํฅ ํต์ (0) | 2024.05.24 |
---|---|
[JAVA] 1:1 ๋จ๋ฐฉํฅ ํต์ (ํด๋ผ์ด์ธํธ์ธก) (0) | 2024.05.24 |
[JAVA] Socket ์ด๋? (0) | 2024.05.23 |
[JAVA] ๊ณ ์์ค ์คํธ๋ฆผ(Data/Object Stream) (0) | 2024.05.22 |
[JAVA] ์ฌ์ฉ์๋ชจ๋์ ์ปค๋๋ชจ๋ (0) | 2024.05.22 |