728x90
Reading Assignment
message queue๋ฅผ ๋ง๋ค๊ณ ๊ทธ Queueใ ์์ ๋ฉ์์ง๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ด๋ค. msgget()์ ๋ฉ์์ง๋ฅผ ๊ฐ์ ธ์ค๋ผ๋ ๊ฒ์ด ์๋๋ผ queue๋ฅผ ๊ฐ์ ธ์ค๋ผ๋ ๊ฒ์ด๋ค. msgsnd() ๋ฉ์์ง๋ฅผ queue์ ๋ฃ์ด๋ฌ๋ผ๊ณ ์์ฒญํ๋ ๊ฒ. msgctl์ ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก IPC_RMID๋ ๋ฉ์์ง Queue ์์ฒด๋ฅผ ์ญ์ ํ๊ฒ ๋๋ค.
Communications in Client-Server Systems
Socket์ ๊ฐ์ฅ Primitiveํ ์ปค๋ฎค๋์ผ์ด์ ๋ฐฉ์์ด๋ค. RPC๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์์ ์ ๊ณตํ๋ ํจ์๋ฅผ ํธ์ถํ ์ ์๋ค. ๊ทธ ํจ์์ ๋ณธ์ฒด๋ ์๋ฒ์ ์๋ ๊ฒ์ด๋ค. ๋คํธ์ํฌ๋ฅผ ํตํ ํจ์ ํธ์ถ ๋ฐฉ์์ด๋ค. Pipe๋ ํด๋ผ์ฐ๋๋ผ๊ธฐ ๋ณด๋ค ๋ก์ปฌํ ํธ์ถ์ ํด๋นํ๋ค. Pipes. RMI, RPC์ ๋น์ทํ์ง๋ง ์ด๋ Java๋ฅผ ์ง์ํ๋ค. C๋ procedure language์ด์ง๋ง Java๋ Object Oriented ํจ์์ด๋ค. ๊ทธ๋์ ์กฐ๊ธ ๋ ๋ณต์กํ๋ค.
Socket
๋ก์ง์ปฌํ endpoint๋ฅผ ๋ถ๋ฅธ๋ค. ์ปดํจํฐ์๋ Socket์ด๋ผ๋ ๊ฒ์ด ์๋ค. Client์ Server์ ๊ฐ๊ฐ Socket์ด ์๋ค. ํ๋์ Connection์ 2๊ฐ์ Socket์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ์ด๋ฅผ ์๋ณํ๊ธฐ ์ํด์ 2๊ฐ๋ฅผ ์์์ผ ํ๋ค. ip address์ port ๋ฒํธ์ด๋ค.
Port
0๋ฒ๋ถํฐ 65535๊ฐ์ Port ๋ฒํธ๋ฅผ ๊ฐ์ง ์ ์๋ค. ์ปดํจํฐ ํ๋๋น ์ ์ซ์์ ํด๋นํ๋ Socket์ ๊ฐ์ง ์ ์๋ค. ๊ทธ ์ค์ ํ๋๋ฅด ์ ํํด์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ์ปดํจํฐ ํ๋๋ ๋ช ๊ฐ์ socket์ ๊ฐ์ง ์ ์์ ๊น? LAN์นด๋๊ฐ ํ๋๋ผ๋ ๊ฒ์ IP address๊ฐ 1๊ฐ ๋ผ๋ ๊ฒ์ด๋ค. ์ด ์ค์์ ํต์ ํ๊ณ ์ถ๋ค๊ณ ํด์ ์๋ฌด๊ฑฐ๋ ์ฌ์ฉํ ์ ์๋ค. 1024๋ฒ ์๋๋ก์ ๋ฒํธ๋ ๋จ๋ค์ด ์ด๋ฏธ ๋ค ์์ฝ์ ํด๋จ๋ค. ์์ฆ์ ssh 20๋ฒ์ ๋ง์ด ์ฌ์ฉํ๋ค.
web server์ socket 80๋ฒ์ ๋ถ์ฌ์ ์ฌ์ฉํ๋ค. client๋ socket์ ํ๋ ๊ฐ์ง๊ณ ์๋๋ฐ 1024๋ณด๋ค ํฐ ์ซ์๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด๋ ๊ฒ ๋ง๋ค๋ฉด ๊ฐ๊ฐ์ socket์ ์ฐ๊ฒฐ์์ผ์ ํต์ ์ ํ ์ ์๋ ๊ฒ์ด๋ค.
Socket
์ฐ์ Port๋ฅผ ์ด์ด์ผ ํ๋ค. ๊ณ์ Client์ ์์ฒญ์ ๋ฐ๊ธฐ ์ํ ๊ธฐ๋ค๋ฆฌ๋ ์ํ๊ฐ ๋๋ค. Client๊ฐ ์ ์์ ํ๋ ค๋ฉด Socket์ ๋ง๋ค๊ณ ์ํ๋ Socket์๋ค๊ฐ ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ์ด๋ค. ๋ด IP์๋ค๊ฐ Port ๋ฒํธ๋ฅผ ๋ถ์ด๋ฉด Socket ๋ฒํธ๊ฐ ๋๋ค.
Java Socket
ServerSocket์ ํด๋์ค์ ์ด๋ฆ์ด๋ค. Server๊ฐ ํฌํธ๋ฅผ ํ๋ ์ด์ด์ CLient์ ์ ์ ์์ฒญ์ ๊ธฐ๋ค๋ฆฐ๋ค๊ณ ํ๋ฉด ๊ทธ ๋ ์ฌ์ฉ๋๋ ๊ฒ์ด ServerSocket์ด๋ค. ์ค์ ์ ์ธ ๋ฐ์ดํฐ ํต์ ์ ์ํ ํด๋์ค๋ ์๋์ Socket ํด๋์ค์ด๋ค. ํฌํธ๋ฅผ ์ด๋ป๊ฒ ์ฌ๋๊ฐ? ์ฒซ๋ฒ์งธ Class์ ํด๋นํ๋ ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ค์ด์ ์์ฒญ์ ํ๋ค. ๊ทธ ๋ค์์ Client๊ฐ Socket์ ๋ง๋ค ๋๋ Socket ํด๋์ค๋ฅผ ์ฌ์ฉํด์ socket์ ๋ง๋ค๊ฒ ๋๋ค. ServerSocket์ ๋ฐ์คํธ์ ์๋ ์ฌ๋์ด๊ณ ๊ทธ ๋ค์์ ๋๊ตฐ๊ฐ๋ฅผ ์๊ฐ์์ผ ์ค๋ค. ๊ทธ๋ฌ๊ณ ์์ ์ ๋ค์ ์๋์ ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋ค. ์์๋ ์ ์ ์ ์ด๊ณ ์๋๋ ์ ์ ํ๋ฅผ ์๊ธฐํ๋ค.
Java Socket
ServerSocket ํด๋์ค์ ์ค๋ธ์ ํธ๋ฅผ ํ๋ ๋ง๋ ๋ค. 6013๋ ํฌํธ๋ฒํธ์ด๋ค. accpet() ํจ์๋ Client์ ์ ๋ณด๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ํ๊ฐ ๋ ์ ์๋ค. Client๊ฐ ์ ์์ ํ๋ ค๊ณ ํ๋ ์ํฉ์ด๋ค. Socket ํด๋์ค์ ์ค๋ธ์ ํธ๋ฅผ ํ๋ ๋ง๋๋๋ฐ IP ๋ฒํธ์ Port ๋ฒํธ๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฃ๊ฒ ๋๋ค. 127.0.0.1์ ์๊ธฐ ์์ ์ ํด๋นํ๋ค. Loop Back Address๋ผ๊ณ ๋ถ๋ฆ. ๋ ์์ ์๊ฒ 6013๋ฒํธ๋ก ๋ณด๋ด๊ฒ ๋๋ค. accpet๋ก ๊ธฐ๋ค๋ฆฌ๋ ์ํฉ์์ ์ ์ ์์ฒญ์ด ๋ค์ด๊ฐ๋ฉด ์ ์์ ๊ฒฐ๊ณผ๋ก Socket์ด ์๊ธด๋ค. ์ฆ, client๋ผ๋ ์ด๋ฆ์ socket์ด ์ ์ฅ๋๊ฒ ๋๋ค.
Java Socket
Server๋ client๋ผ๋ ๋ณ์๋ฅผ ๊ฐ์ง๊ณ CLient๋ sock ์ด๋ผ๋ ๋ณ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค. clinet.getOUTputStream() ํจ์๋ฅผ ํธ์ถํ๋ค. pout์ด๋ผ๋ ๋ณ์์ ํด๋น write ๊ฐ์ฒด๋ฅผ ๋ฃ๊ฒ ๋๋ค. ์ค๋ ๋ ์ง๋ฅผ toString ํจ์๋ฅผ ํด์ pout์ ๋ฃ๊ฒ ๋๋ค.
Client๋ sock.getInputSTream() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค. InputStream ํ์ ์ธ ๋ณ์ in์๋ค๊ฐ ์ง์ด๋ฃ๊ฒ ๋๋ค. BufferedReader ํด๋์ค๋ฅผ ์ด์ฉํด์ ๋ ์ฝ๊ฒ ์ฝ๊ฒ ํ ์ ์๋ค. bin.readLine() ํจ์๋ฅผ ํตํด์ ์ ๋ ฅํ ๋ ์ง ์ ๋ณด๋ฅผ ์ฝ๊ฒ ๋๋ค. Server๊ฐ Stream์ ์ฌ๋ฌ ๊ฐ ์ง์ด๋ฃ๊ฒ ๋๋ฉด ๋ค ์ถ๋ ฅํ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ client.close()๋ฅผ ํ๋ฉด socket์ด ๋ซํ๊ฒ ๋๊ณ ์ด ๋ป์ ๋๋ ๋ ์ด์ ์ธ ๊ฒ์ด ์๋ค๋ผ๊ณ ํํํ๊ฒ ๋๊ณ null์ ๋ฃ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ sock.close๋ฅผ ํ๋ฉด Client์ socket์ ๋ซ๊ฒ ๋๋ค.
Remote Procedure Call
Client๊ฐ fn์ด๋ผ๋ ํจ์๋ฅผ ํธ์ถํ๋๋ฐ ์ด๋ Server ์์ ์กด์ฌํ๋ฏ๋ก Server์ ์๋ ํจ์๋ฅผ ํธ์ถํ๋ค๊ณ ํ๊ฒ ๋๋ค. Client์ client stub์ด ์๊ณ server์๋ server stub์ด๋ผ๋ ๊ฒ์ด ์๋ค. Client์ ์ฅ์์๋ ์๋ฌด ์๊ฐ ์์ด fn์ ํธ์ถํ๊ฒ ๋๊ณ client stub์๋ fn์ด๋ผ๋ ํจ์๊ฐ ์กด์ฌํด์ Server์ชฝ์ ์กด์ฌํ๋ fn ํจ์๋ฅผ ๊ฐ์ ธ์ค๊ฒ ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ๋ํ stub์์ ๊ฐ์ ธ์์ ์ถ๋ ฅํ๊ฒ ๋๋ค.
Remote Procedure Calls
์กฐ๊ทธ๋งํ stub์ ์ฌ๋ ค์ ธ์ ๊ตฌํ์ด ๋๊ฒ ๋๋ค. ๋ชจ๋ ์ํต์ ์ญํ ์ stub์ด ๋ค ๋งก๊ณ ์๋ค๊ณ ๋ณด๋ฉด ๋๋ค. ์ด๋ค Server์ ์ฐ๊ฒฐํ๊ณ ์ด๋ค Port์ ์ฐ๊ฒฐํด์ผ ํ๋์ง ์๊ณ ์์ด์ผ ํ๋ค. Client์ Server๊ฐ ๋ค๋ฅธ ํ๊ฒฝ์์ ์กด์ฌํ๋ค๊ณ ํ๋ฉด 32๋นํธ ์ปดํจํฐ์ 64๋นํธ ์ปดํจํฐ๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ์ด ๋ค๋ฅด๋ค. ๊ทธ๋ฌ๋ฉด Client์ Server์ INT ํธํ์ด ์ฑ๋ฆฝํ์ง ์๋๋ค. ํ์ค Format์ ๋ง๋ค์ด์ ์ํต์ ํ๋ค.
Remote procedure Calls
Standard Representation์ผ๋ก ๋ฐ๊พธ๋ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ๋ค. marshaling์ unmarshalling์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
Pipes
ํ๋์ ๊ฐ์ ํ๊ฒฝ. Fileํ๊ณ ์ฌ์ฉ๋ฒ์ด ๋์ผํ๋ค. ๋ ๊ฐ์ ๋ฆฌํด ๊ฐ์ ๊ฐ์ง๊ณ fd[0]์ Read์ด๊ณ fd[1]์ Writeํ ๋ ์ฐ์ธ๋ค. Parent Child๊ฐ Producer Consumer๋ก ๋ฌถ์ฌ์๋ค๊ณ ์๊ฐํด๋ณด์. ๊ทธ๋ฌ๋ฉด parent๋ fd[1]์ ์ฌ์ฉํ๋ค. Producer๋ Write ํ๋ ํ๋ก์ธ์์ด๋ค. Producer์ชฝ fd[0]๋ close๋ฅผ ํ๋ค. Consumer๋ fd[1]์ ์ฌ์ฉํ๋ค. fd[0]์ fd[1]์ ๊ณต์ ํด๋๋ฅผ ๊ฐ๋ฆฌ์ผ์ผ ํ๋ค. fork ์ด์ ์ ์คํ ๋ ๊ฒ์ ๊ณต์ ๋๊ณ ์ดํ์ ์คํ ๋ ๊ฒ์ ๋ฐ๋ก ์กด์ฌํ๋ค. forkํ๊ธฐ ์ ์ PIPE๋ฅผ ๋จผ์ ๋ง๋ค๋ฉด ๋๋ค. Ordinary Pipe๋ Parent child ๊ด๊ณ์์๋ง ์ฌ์ฉํ ์ ์๊ณ Named Pipe๋ Parent child ๊ด๊ณ๊ฐ ์๋ ๊ณณ์์๋ ์ฌ์ฉํ ์ ์๋ค.
๋์ค ๊ณผ์ ํ ๋ ๋์์ด ๋ ๊ฒ
write๋ฅผ closeํ ๋ error๊ฐ ๋ฐ์ํ๋ฏ๋ก์จ write๊ฐ ๋ค ๋๋ฌ๋ค๊ณ ๋ณด๋ด๊ฒ ๋๋ฉด read ๋ ํ์ถํ๊ฒ ๋๋ค.
Remote Method Invocation
RMI๋ OOP๋ฅผ ์ํด์ ๋ง๋ค์ด์ก๋ค. Java์ ์๋ ๋ชจ๋ ๊ฒ๋ค์ ํด๋์ค์ ์ค๋ธ์ ํธ์ ์ํด์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ RMI๋ ํด๋์ค์ ์ค๋ธ์ ํธ์ ์ํด์๋ค. server์์ stub์ ๋ฐ์์ฃผ๋ ๊ฒ๋ค์ skeleton์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.