์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[JAVA] 1:1 ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹  (์„œ๋ฒ„์ธก)

JAVA

by ๋ฏธ๋กœ910 2024. 5. 24. 10:01

๋ณธ๋ฌธ

๐Ÿ’ก ์„œ๋ฒ„ ์ธก ๊ธฐ๋ณธ ์ฝ”๋“œ ์ž‘์„ฑ์˜ ๋ชฉ์ 

๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์‹œ์ž‘ํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๋จผ์ € ๋ฐฐ์›Œ์•ผ ํ•  ๊ฒƒ์€ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ํ†ต์‹  ์ž…๋‹ˆ๋‹ค. 
์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„๋“ค์ด๊ณ , ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๋‚ด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„ ์ธก ๊ธฐ๋ณธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ์„ ํ•ด๋ณด๋Š” ์ด์œ ?

 

๋„คํŠธ์›Œํฌ ํ†ต์‹ ์˜ ๊ธฐ์ดˆ ์ดํ•ด

์„œ๋ฒ„๋Š” ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์˜ ํ•ต์‹ฌ ์—ญํ• ์„ ํ•œ๋‹ค.

์„œ๋ฒ„ ์ธก ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•จ์œผ๋กœ์จ ์šฐ๋ฆฌ๋Š” ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์„œ๋ฒ„ ์†Œ์ผ“(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๊ฐœ์˜ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ด ํฌํŠธ ๋ฒˆํ˜ธ๋“ค์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ชฉ์ ์— ๋”ฐ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ๋ถ„๋œ๋‹ค.

  1. ์ž˜ ์•Œ๋ ค์ง„ ํฌํŠธ ๋ฒˆํ˜ธ(Well-known Ports): 0๋ถ€ํ„ฐ 1023๊นŒ์ง€ (์ฃผ๋กœ ์‹œ์Šคํ…œ ๋ ˆ๋ฒจ์˜ ์„œ๋น„์Šค์— ์‚ฌ์šฉ)
  2. ๋“ฑ๋ก๋œ ํฌํŠธ ๋ฒˆํ˜ธ(Registered Ports): 1024๋ถ€ํ„ฐ 49151๊นŒ์ง€ (ํŠน์ • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค์— ์‚ฌ์šฉ)
  3. ๋™์ /์‚ฌ์„ค ํฌํŠธ ๋ฒˆํ˜ธ(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๊ฐœ์˜ ํฌํŠธ ๋ฒˆํ˜ธ๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ด๋“ค์€ ์ž˜ ์•Œ๋ ค์ง„ ํฌํŠธ ๋ฒˆํ˜ธ, ๋“ฑ๋ก๋œ ํฌํŠธ ๋ฒˆํ˜ธ, ๋™์ /์‚ฌ์„ค ํฌํŠธ ๋ฒˆํ˜ธ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค. ์ž˜ ์•Œ๋ ค์ง„ ํฌํŠธ ๋ฒˆํ˜ธ๋Š” ํ‘œ์ค€ํ™”๋œ ์ธํ„ฐ๋„ท ์„œ๋น„์Šค์— ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ฐ ํฌํŠธ ๋ฒˆํ˜ธ๋Š” ํŠน์ • ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋„คํŠธ์›Œํฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์„œ๋กœ ๊ฐ„์˜ ํ†ต์‹ ์„ ์›ํ™œํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ