์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- @scheduler
- docker
- docker network
- dockerhub
- ํฌ๋ก์ค์ฌ์ดํธ ์คํฌ๋ฆฝํธ
- CICD
- db์ ๋ต
- SpringBoot
- Jenkins
- spring
- ๋์์ธํจํด
- ์ฝ๋ฉํ ์คํธ
- ์๊ณ ๋ฆฌ์ฆ
- ์ฝํ
- ์๋ฐ
- MySQL
- oauth
- db์ํคํ ์ณ
- injection๊ณต๊ฒฉ
- java์ฑํ
- Personal Access Token
- React
- GoogleLogin
- Node.js
- ์ค๋ธ์
- spring scheduler
- ๋ ผ๋ธ๋กํน
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- Java
- node.js mysql ์ฐ๋
- Today
- Total
<Hello Hosung๐/>
[Java] ์์ผํต์ ์ ๊ธฐ์ด(+์ฑํ ๐ง) ๋ณธ๋ฌธ
[Java] ์์ผํต์ ์ ๊ธฐ์ด(+์ฑํ ๐ง)
์ข์ถฉ์ฐ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ์ผ๊ธฐ๐ง 2024. 11. 7. 06:54์์ผ(Socket)์ ๋คํธ์ํฌ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์๊ฒ ํด์ฃผ๋ ์๋ฐฉํฅ ํต์ ์ฑ๋์
๋๋ค. ์๋ฐ์์๋ java.net ํจํค์ง๋ฅผ ํตํด ์์ผ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํฉ๋๋ค. ์ด ๊ธ์์๋ ์๋ฐ ์์ผ ํต์ ์ ์ด์ฉํ์ฌ ๊ฐ๋จํ ์ฑํ
ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.
1. ์์ผ ํต์ ์ ๊ธฐ๋ณธ ์ดํด
์์ผ ํต์ ์ ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ๋๋ ์ ์์ต๋๋ค:
์๋ฒ(Server): ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ์ ๊ด๋ฆฌํ๋ ์ญํ
ํด๋ผ์ด์ธํธ(Client): ์๋ฒ์ ์ ์ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ์ญํ
์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋๊ธฐํ๋ฉฐ ์ฐ๊ฒฐ์ ์๋ฝํ๊ณ , ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์ฐ๊ฒฐ ์์ฒญ์ ๋ณด๋
๋๋ค. ๋ฐ์ดํฐ๋ InputStream๊ณผ OutputStream์ ํตํด ์ฃผ๊ณ ๋ฐ์ต๋๋ค.
2. ์ฑํ ์๋ฒ ๊ตฌํ
์ฑํ
์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ์ ๋ฐ๊ณ , ๋ฉ์์ง๋ฅผ ํด๋ผ์ด์ธํธ๋ค์๊ฒ ์ ๋ฌํ๋ ์ญํ ์ ํฉ๋๋ค.
์๋ฒ ์ฝ๋ (ChatServer.java)
import java.io.*;
import java.net.*;
import java.util.*;
public class ChatServer {
private static final int PORT = 12345;
private static Set<PrintWriter> clientWriters = new HashSet<>();
public static void main(String[] args) {
System.out.println("์ฑํ
์๋ฒ ์์...");
try (ServerSocket serverSocket = new ServerSocket(PORT)) {
while (true) {
new ClientHandler(serverSocket.accept()).start();
}
} catch (IOException e) {
System.err.println("์๋ฒ ์ค๋ฅ: " + e.getMessage());
}
}
private static class ClientHandler extends Thread {
private Socket socket;
private PrintWriter out;
private BufferedReader in;
public ClientHandler(Socket socket) {
this.socket = socket;
}
public void run() {
try {
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
synchronized (clientWriters) {
clientWriters.add(out);
}
String message;
while ((message = in.readLine()) != null) {
System.out.println("ํด๋ผ์ด์ธํธ ๋ฉ์์ง: " + message);
synchronized (clientWriters) {
for (PrintWriter writer : clientWriters) {
writer.println(message);
}
}
}
} catch (IOException e) {
System.err.println("ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ ์คํจ: " + e.getMessage());
} finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
synchronized (clientWriters) {
clientWriters.remove(out);
}
}
}
}
}
3. ์ฑํ ํด๋ผ์ด์ธํธ ๊ตฌํ
์ฑํ
ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์ฐ๊ฒฐํ๊ณ , ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๋ฉ์์ง๋ฅผ ์๋ฒ๋ก ์ ์กํฉ๋๋ค. ์๋ฒ์์ ๋ณด๋ธ ๋ฉ์์ง๋ฅผ ๋ฐ์์ ํ๋ฉด์ ์ถ๋ ฅํฉ๋๋ค.
ํด๋ผ์ด์ธํธ ์ฝ๋ (ChatClient.java)
import java.io.*;
import java.net.*;
public class ChatClient {
private static final String SERVER_ADDRESS = "localhost";
private static final int SERVER_PORT = 12345;
public static void main(String[] args) {
try (Socket socket = new Socket(SERVER_ADDRESS, SERVER_PORT);
BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in));
BufferedReader serverInput = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter serverOutput = new PrintWriter(socket.getOutputStream(), true)) {
// ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ ์ค๋ ๋
Thread listenerThread = new Thread(() -> {
try {
String message;
while ((message = serverInput.readLine()) != null) {
System.out.println("์๋ฒ: " + message);
}
} catch (IOException e) {
System.err.println("์๋ฒ์์ ์ฐ๊ฒฐ์ด ๋์ด์ก์ต๋๋ค.");
}
});
listenerThread.start();
// ์ฌ์ฉ์ ์
๋ ฅ์ ์๋ฒ๋ก ์ ์กํ๋ ๋ถ๋ถ
String userMessage;
while ((userMessage = userInput.readLine()) != null) {
serverOutput.println(userMessage);
}
} catch (IOException e) {
System.err.println("ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ ์คํจ: " + e.getMessage());
}
}
}
4. ์ฑํ
ํ๋ก๊ทธ๋จ ์คํ
1. ์๋ฒ ์คํ: ๋จผ์ ์๋ฒ ํ๋ก๊ทธ๋จ์ ์คํํฉ๋๋ค. ์๋ฒ๋ ํด๋ผ์ด์ธํธ๋ค์ ์ฐ๊ฒฐ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค.
java ChatServer
2. ํด๋ผ์ด์ธํธ ์คํ: ์ฌ๋ฌ ํด๋ผ์ด์ธํธ๋ฅผ ์คํํ์ฌ ์๋ก ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์์ต๋๋ค.
java ChatClient
5. ๋์ ์๋ฆฌ
ํด๋ผ์ด์ธํธ๋ Socket์ ํตํด ์๋ฒ์ ์ฐ๊ฒฐํฉ๋๋ค.
์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ผ๋ฉฐ, ์ฐ๊ฒฐ์ด ์ด๋ฃจ์ด์ง๋ฉด ClientHandler ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ํด๋น ํด๋ผ์ด์ธํธ์์ ํต์ ์ ๊ด๋ฆฌํฉ๋๋ค.
ํด๋ผ์ด์ธํธ๋ ์
๋ ฅํ ๋ฉ์์ง๋ฅผ ์๋ฒ๋ก ์ ์กํ๊ณ , ์๋ฒ๋ ํด๋น ๋ฉ์์ง๋ฅผ ๋ชจ๋ ์ฐ๊ฒฐ๋ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํฉ๋๋ค.
์๋ฒ์ ํด๋ผ์ด์ธํธ๋ ๊ฐ๊ฐ BufferedReade์ PrintWriter๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ก์์ ํฉ๋๋ค.
6. ๋ง๋ฌด๋ฆฌ
์ด๋ฒ ํฌ์คํธ์์๋ ์๋ฐ ์์ผ ํต์ ์ ์ด์ฉํ์ฌ ๊ฐ๋จํ ์ฑํ
ํ๋ก๊ทธ๋จ์ ๋ง๋ค์์ต๋๋ค. ์ด ํ๋ก๊ทธ๋จ์ ๋ฉํฐ ํด๋ผ์ด์ธํธ ํ๊ฒฝ์์๋ ์ ์๋ํ๋ฉฐ, ์ค์๊ฐ์ผ๋ก ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์์ต๋๋ค. ์์ผ ํ๋ก๊ทธ๋๋ฐ์ ํตํด ๋คํธ์ํฌ ํต์ ์ ๋ํ ๊ธฐ์ด๋ฅผ ์ดํดํ ์ ์์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
'๐ป Java > ใ คJava(Basic)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ๋์์ธ ํจํด (3) | 2024.11.14 |
---|---|
[Java] ์ง๋ ฌํ(Serialization)๋? (2) | 2024.11.12 |
[Java] ์ธํฐํ์ด์ค๋? (0) | 2024.11.10 |
[Java] ํ์ผ ์ ์ถ๋ ฅ (IO) ์ดํดํ๊ธฐ (1) | 2024.11.09 |