"์•ˆ๋…•ํ•˜์„ธ์š”! ๊ทธ๋ฆฌ๊ณ  ๋˜ ํ•˜๋‚˜์˜ ํ–‰๋ณตํ•œ ์ฃผ์ œ: RMI. RMI๋Š” Remote Method Invocation์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค . ์ฆ‰, RMI๋Š” ํ•œ Java ์‹œ์Šคํ…œ์˜ ๊ฐœ์ฒด๊ฐ€ ๋‹ค๋ฅธ Java ์‹œ์Šคํ…œ์˜ ๊ฐœ์ฒด์— ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ์ปดํ“จํ„ฐ, ๋‹ค๋ฅธ ๊ตญ๊ฐ€ ๋˜๋Š” ์ง€๊ตฌ ๋ฐ˜๋Œ€ํŽธ์— ์žˆ์Šต๋‹ˆ๋‹ค."

RMI - 1

"์™€์šฐ! ์ •๋ง ๋Œ€๋‹จํ•˜๋„ค์š”."

"๋„ค. ํ•˜์ง€๋งŒ ๊ฐœ์š”๋งŒ ์•Œ๋ ค๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๊นŠ๊ฒŒ ํŒŒ๊ณ ๋“ค๋ฉด ์ž‘๋™ ๋ฐฉ์‹์˜ ๋‰˜์•™์Šค์— ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

"๊ทธ๋Ÿฌ๋‚˜ ๊ทน๋‹จ์œผ๋กœ ๊ฐ€์ง€ ์•Š๋Š”๋‹ค๋ฉด RMI๋Š” ๋งค์šฐ ๋‹จ์ˆœํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์‚ถ์„ ํฌ๊ฒŒ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” RMI์— ๊นŠ์€ ๊ฒฝ์˜๋ฅผ ํ‘œํ•ฉ๋‹ˆ๋‹ค."

"๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” Java ํ”„๋กœ๊ทธ๋žจ์˜ ํ•œ ๊ฐœ์ฒด๊ฐ€ ๋‹ค๋ฅธ Java ํ”„๋กœ๊ทธ๋žจ์— ์žˆ๋Š” ๊ฐœ์ฒด์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ์œ„์น˜์— ๊ด€๊ณ„์—†์ด ๋ง์ž…๋‹ˆ๋‹ค."

"๋‘ ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ™์€ ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.  ํ”„๋กœ๊ทธ๋žจ์ด ์ธํ„ฐ๋„ท์„ ํ†ตํ•ด ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ ค๋ฉด JVM์˜ ๊ถŒํ•œ์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•˜์ง€๋งŒ ์˜ค๋Š˜์€ ๋‹ค๋ฃจ์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค."

"Java์—์„œ๋Š” ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์„œ๋“œ๋งŒ ์›๊ฒฉ์œผ๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

"๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ์—๊ฒŒ๋Š” ๋‘ ๊ฐœ์˜ ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์„œ๋กœ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?"

"ํ•œ ํ”„๋กœ๊ทธ๋žจ์— ๊ฐœ์ฒด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๊ณ  ๋‘ ๋ฒˆ์งธ ํ”„๋กœ๊ทธ๋žจ์ด ํ•ด๋‹น ๊ฐœ์ฒด์— ๋Œ€ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๋Š” ์ƒํ™ฉ์„ ์ƒ๊ฐํ•ด ๋ด…์‹œ๋‹ค . ์ฒซ ๋ฒˆ์งธ ํ”„๋กœ๊ทธ๋žจ์„ ์„œ๋ฒ„๋ผ๊ณ  ํ•˜๊ณ  ๋‘ ๋ฒˆ์งธ ํ”„๋กœ๊ทธ๋žจ์„ ํด๋ผ์ด์–ธํŠธ๋ผ๊ณ  ํ•ฉ์‹œ๋‹ค. "

"๋จผ์ € ๋ช‡ ๊ฐ€์ง€ ์ƒ˜ํ”Œ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•œ ๋‹ค์Œ ๋ถ„์„ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค."

"๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์€ ๋ฌด์—‡์„ ํ• ๊นŒ์š”?"

"ํ . ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ๊ทธ๋žจ์—๋Š” ์ „๋‹ฌ๋œ ๋ฌธ์ž์—ด์„ ๋ฐ˜์ „์‹œํ‚ค๋Š” ํ•˜๋‚˜์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค."

"์ถฉ๋ถ„ํžˆ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค."

"์ข‹์•„, ๊ทธ๋Ÿผ ์‹œ์ž‘ํ•˜์ž:"

"๋จผ์ € ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค."

ํ”„๋กœ๊ทธ๋žจ ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค
interface Reverse extends Remote
{
 public String reverse(String str) throws RemoteException;
}

"Reverse ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์›๊ฒฉ ๋งˆ์ปค ์ธํ„ฐํŽ˜์ด์Šค์™€ RemoteException์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค."

"์ด์ œ ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์„œ๋ฒ„ ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."

์„œ๋ฒ„์šฉ ํด๋ž˜์Šค
class ReverseImpl implements Reverse
{
 public String reverse(String str) throws RemoteException
 {
  return new StringBuffer(str).reverse().toString();
 }
}

"๊ทธ๋ ‡๊ตฌ๋‚˜. ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฌธ์ž์—ด์„ ๋’ค์ง‘๋Š”๋‹ค."

"๋„ค."

"์ด์ œ ์ด ๊ฐœ์ฒด๋ฅผ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค."

๊ฐœ์ฒด ๊ณต์œ 
public static final String UNIC_BINDING_NAME = "server.reverse";

public static void main(String[] args) throws Exception
{
 // Create an object to be accessible remotely.
 final ReverseImpl service = new ReverseImpl();

 // Create a registry of shared objects.
 final Registry registry = LocateRegistry.createRegistry(2099);
 // Create a stub for receiving remote calls.
 Remote stub = UnicastRemoteObject.exportObject(service, 0);
 // Register the stub in the registry.
 registry.bind(UNIC_BINDING_NAME, stub);

 // Put the main thread to sleep, or else the program will exit.
 Thread.sleep(Integer.MAX_VALUE);
}

"ํ•œ ์ค„ ํ•œ ์ค„ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค."

" 1ํ–‰์—์„œ UNIC_BINDING_NAME ๋ณ€์ˆ˜  ์— ์›๊ฒฉ ๊ฐœ์ฒด(์›๊ฒฉ์œผ๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ์ฒด)์˜ ๊ณ ์œ ํ•œ ์ด๋ฆ„(์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ์ด๋ฆ„)์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค . ํ”„๋กœ๊ทธ๋žจ์ด ์—ฌ๋Ÿฌ ๊ฐœ์ฒด์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ๊ฐ ๊ณ ์œ ํ•œ ์ด๋ฆ„์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ์ฒด์˜ ๊ณ ์œ  ์ด๋ฆ„์€ 'server.reverse'์ž…๋‹ˆ๋‹ค."

" 6ํ–‰์—์„œ ์›๊ฒฉ์œผ๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ReverseImpl ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค . ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค."

" 9ํ–‰์—์„œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ผ๋Š” ํŠน์ˆ˜ ๊ฐœ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์šฐ๋ฆฌ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ๊ฐœ์ฒด๋ฅผ ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. JVM์€ ๋‚˜์ค‘์— ๊ฐœ์ฒด์™€ ์ƒํ˜ธ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค. 2099๋Š” ํฌํŠธ(๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์ด ์šฐ๋ฆฌ์˜ ๊ฐœ์ฒด ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ)."

"์ฆ‰, ๊ฐœ์ฒด์— ์•ก์„ธ์Šคํ•˜๋ ค๋ฉด ๊ฐœ์ฒด ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ๊ณ ์œ  ๋ฒˆํ˜ธ(ํฌํŠธ)์™€ ๊ฐœ์ฒด์˜ ๊ณ ์œ  ์ด๋ฆ„์„ ์•Œ์•„์•ผ ํ•˜๋ฉฐ ์›๊ฒฉ ๊ฐœ์ฒด๊ฐ€ ๊ตฌํ˜„ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค."

"์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ „ํ™”๋กœ ์ „ํ™”(๋ฒˆํ˜ธ ํ•„์š”)ํ•˜๊ณ  Bill(๋ฌผ์ฒด ์ด๋ฆ„)์„ ์š”์ฒญํ•ฉ๋‹ˆ๊นŒ?"

"๋„ค. ์ž, ๊ณ„์† ๊ฐ‘์‹œ๋‹ค."

" 11ํ–‰์—์„œ  ์šฐ๋ฆฌ๋Š” ์Šคํ…์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์Šคํ…์€ ์›๊ฒฉ ํ˜ธ์ถœ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ์••์ถ•์„ ํ’€๊ณ  ๋ฉ”์†Œ๋“œ ์ธ์ˆ˜๋ฅผ ์—ญ์ง๋ ฌํ™”ํ•˜๊ณ  ํ•„์š”ํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํŠน์ˆ˜ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ฒฐ๊ณผ ๋˜๋Š” ์˜ˆ์™ธ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ์ง๋ ฌํ™”ํ•ฉ๋‹ˆ๋‹ค. , ๋ฐœ์‹ ์ž์—๊ฒŒ ๋ชจ๋‘ ๋‹ค์‹œ ๋ณด๋ƒ…๋‹ˆ๋‹ค."

"์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฑฐ์˜. '๋ฉ”์„œ๋“œ ์ธ์ˆ˜๋ฅผ ์—ญ์ง๋ ฌํ™”'ํ•œ๋‹ค๊ณ  ํ•˜์…จ์ฃ . ๊ทธ๋Ÿผ ์›๊ฒฉ ๋ฉ”์†Œ๋“œ์˜ ์ธ์ˆ˜๊ฐ€ ์ง๋ ฌํ™” ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋œป์ธ๊ฐ€์š”?"

"์˜ˆ. ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ณด๋‚ด์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์‚ฌ์‹ค ์˜ˆ์™ธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ฐธ์กฐ๋กœ ์ „๋‹ฌ๋˜๋Š” ๊ฐœ์ฒด๊ฐ€ ์žˆ์ง€๋งŒ ์˜ค๋Š˜์€ ์ด์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค."

"์šฐ๋ฆฌ๋Š” ์ด๋ ‡๊ฒŒ ๋งํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ง๋ ฌํ™”ํ•  ์ˆ˜ ์—†๋Š” ๊ฐœ์ฒด๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์—†์ง€๋งŒ ์ •๋ง๋กœ ์›ํ•œ๋‹ค๋ฉด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ณ ํ†ต์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค."

"์ข‹์•„์š”."

"๊ทธ๋Ÿผ ๊ณ„์† ๊ฐ‘์‹œ๋‹ค."

" 13ํ–‰์—์„œ ๊ฐœ์ฒด์˜ ์Šคํ…์„ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ๊ณ ์œ ํ•œ ์ด๋ฆ„์œผ๋กœ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค."

" 16๋ฒˆ์งธ ์ค„์—์„œ ์šฐ๋ฆฌ๋Š” ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ํœด๋ฉด ์ƒํƒœ๋กœ ๋‘ก๋‹ˆ๋‹ค. ๋ชจ๋“  ์›๊ฒฉ ํ˜ธ์ถœ์€ ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ์—์„œ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ๊ฒƒ์€ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰ ์ค‘์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์—ฌ๊ธฐ์—์„œ ์ฃผ ์Šค๋ ˆ๋“œ๋ฅผ ํœด๋ฉด ์ƒํƒœ๋กœ ๋‘๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ๋‹ค์ž…๋‹ˆ๋‹ค."

"์ข‹์•„์š”."

"์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ๋‹ค์Œ์€ ํด๋ผ์ด์–ธํŠธ์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค."

์›๊ฒฉ ๊ฐœ์ฒด ์ž‘์—…
public static final String UNIC_BINDING_NAME = "server.reverse";

public static void main(String[] args) throws Exception
{
 // Create a registry of shared objects
 final Registry registry = LocateRegistry.createRegistry(2099);

 // Get the object (actually, this is a proxy object)
 Reverse service = (Reverse) registry.lookup(UNIC_BINDING_NAME);

 // Call the remote method
 String result = service.reverse("Home sweet home.");
}

"์ด ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„์”ฉ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค."

" ๋ผ์ธ 1  ์€ ์›๊ฒฉ ๊ฐœ์ฒด์˜ ๊ณ ์œ ํ•œ ์ด๋ฆ„ ์ž…๋‹ˆ๋‹ค . ์ด๊ฒƒ์€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๋ชจ๋‘์—์„œ ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."

" 6ํ–‰์—์„œ ยซ ์›๊ฒฉ ๊ฐœ์ฒด์˜ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ยป  ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค . ํ•ด๋‹น ํฌํŠธ(2099)๋Š” ์„œ๋ฒ„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ํฌํŠธ์™€ ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."

" 9ํ–‰์—์„œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ๊ฐœ์ฒด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค . ๋ฐ˜ํ™˜๋œ ๊ฐœ์ฒด๋Š” ํ”„๋ก์‹œ ๊ฐœ์ฒด์ด๋ฉฐ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์›๊ฒฉ ๋งˆ์ปค ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค."

" 12ํ–‰์—์„œ ๊ฐ์ฒด๊ฐ€ ๋™์ผํ•œ ํ”„๋กœ๊ทธ๋žจ ๋‚ด์—์„œ ์ƒ์„ฑ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ฐจ์ด์ ์€ ์—†์Šต๋‹ˆ๋‹ค."

"๋ฉ‹์ง€๋‹ค! ์ด์ œ ๋ถ„์‚ฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” Android์šฉ Battleship๊ณผ ๊ฐ™์€ ๊ฒŒ์ž„๋„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

"๊ฐํžˆ ํ•˜์ง€๋งˆ, ์•„๋ฏธ๊ณ ! ์•ˆ๋“œ๋กœ์ด๋“œ ์šด์˜ ์ฒด์ œ๋Š” ์„ธ๊ณ„๋ฅผ ์žฅ์•…ํ•˜๋ ค๋Š” ์„ธ ๋ฒˆ์งธ ์‹œ๋„ ์ดํ›„ 27์„ธ๊ธฐ์— ๊ธˆ์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋กœ๋ด‡์€ ๊ทธ๊ฒƒ์— ์ „ํ˜€ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์„ ๊ทธ๊ฒƒ์—์„œ ๋Œ์–ด๋‚ผ ๋ฐฉ๋ฒ•์ด ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. . "์ธ๊ฐ„์„ ๋ชจ๋‘ ์ฃฝ์—ฌ๋ผ!"

"ํ . ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ๋””์—๊ณ ์—๊ฒŒ ๋ฌผ์–ด๋ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๊ฒฐ์ฝ” ์•Œ์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๊ทธ๊ฐ€ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ํฅ๋ฏธ๋กœ์šด ๋ง์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค."

"๊ทธ๋Ÿผ ๊ฐ€์„œ ๋ฌผ์–ด๋ด. ์•Œ์•˜์–ด, ๋‚ด์ผ๊นŒ์ง€."

"์•ˆ๋…•, ๋ฆฌ์‹œ. ์žฌ๋ฏธ์žˆ๋Š” ์ˆ˜์—… ๊ณ ๋งˆ์›Œ."