μΌμ λͺ»μκ²Όμ΄ λμ€μ μμ ν κ²μ μΌλ¨ μ¬κΈ°λ‘... https://velog.io/@hgo641/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EA%B4%80%EB%A6%AC
νλ‘μΈμ€ μμ€ν μμ μ λ¨μ λ©λͺ¨λ¦¬μ μ μ¬λμ΄μλ νλ‘κ·Έλ¨ νλ‘μΈμ€ ꡬμ±μμ νλ‘μΈμ€ λ©λͺ¨λ¦¬
μ€ν : μΌμμ μΈ λ°μ΄ν°λ€μ μ μ₯(ν¨μ λ§€κ°λ³μ, ν¨μ 리ν΄κ° λ±), μ»΄νμΌ νμμ ν¬κΈ°κ° κ²°μ λΌμ 무νμΌλ‘ ν λΉν μ μμ.(μ€νμ€λ²νλ‘μ°) ν : λμ μΈ λ°μ΄ν° μ μ₯(λμ λ°°μ΄ λ±). λ°νμμ κ²°μ λΌμ μ ν΄μ§ ν¬κΈ°κ° μμ. λ°μ΄ν° : μ μ λ³μ μ μ₯ ν μ€νΈ : μ½λ μ μ₯ -> κ°μ νλ‘κ·Έλ¨μΌλ‘λΆν° μμ±λ νλ‘μΈμ€μ¬λ, ν μ€νΈ λΆλΆλ§ λμΌνκ³ λ€λ₯Έ λΆλΆλ€μ λ€λ₯Ό μ μλ€.
PCB(Process Control Block) νλ‘μΈμ€ μν, νλ‘μΈμ€ μμ΄λ, μ€μΌμ€λ§ μ 보, μ°μ μμ νλ‘κ·Έλ¨ μΉ΄μ΄ν° : λ€μμ μ΄λ μ½λλ₯Ό μ€νν΄μΌ ν μ§λ₯Ό μ μ₯νλ€. (νλ‘μΈμ€ λ©λͺ¨λ¦¬μ μ½λλΆλΆμ κ°λ¦¬ν€λ ν¬μΈν°κ° μ‘΄μ¬!) νλ‘μΈμ λ μ§μ€ν° : λ μ§μ€ν°μ λ³μκ°λ±μ μ μ₯! μ΄κ³ μλ νμΌλ€μ μ 보 μ€λ λ μ 보 νλ‘μΈμ€ μν
μ€λΉ : λ©λͺ¨λ¦¬μ μ μ¬λ μνμ΄λ©°, cpuλ§ ν λΉλ°μΌλ©΄ μΈμ λ μΌν μ μλ μν λκΈ° : λ©λͺ¨λ¦¬μ μ μ¬λ μνκ° μλ μλ μμΌλ©°, cpuλ₯Ό ν λΉλ°μλ μΌν μ μλ μν νλ‘μΈμ€ μ€μΌμ€λ§ ν
OSμλ μ€λΉνμ λκΈ°νκ° μ‘΄μ¬νλ€. λλ°μ΄μ€λ§λ€ νλ€μ΄ μ‘΄μ¬ν μ μμΌλ©°, κ° νλ€μ PCBλ₯Ό μ°κ²°λ¦¬μ€νΈλ‘ μ μ₯νκ³ μλ€.
λ¬Έλ§₯ κ΅ν νλ‘μΈμ€κ° μ΄λκΉμ§ μ€ννλμ§, νμ¬ μ΄λ€ μνμΈμ§λ± νλ‘μΈμ€ μνλ₯Ό νμ νκΈ° μν λͺ¨λ μ 보λ₯Ό λ¬Έλ§₯μ΄λΌκ³ νλ€. pc, λ μ§μ€ν°, νλ‘μΈμ€ λ©λͺ¨λ¦¬, PCBκ° ν¬ν¨λλ€. CPUκ° μ€νν μμ μ μ μ νλ‘μΈμ€Aμμ μ μ νλ‘μΈμ€Bλ‘ λ°κΎΈλ κ²μ λ¬Έλ§₯ κ΅νμ΄λΌκ³ νλ€. (μ μ νλ‘μΈμ€μμ 컀λνλ‘μΈμ€λ‘ μ ννλ κ²μ λ¬Έλ§₯ κ΅νμ΄λΌκ³ λΆλ₯΄μ§ μμ! μ μ νλ‘μΈμ€->μ μ νλ‘μΈμ€λ³΄λ€ μ€λ²ν€λκ° μ λ€.) λ¬Έλ§₯ κ΅νμμλ μ μ νλ‘μΈμ€Aμ λν μ 보λ₯Ό μ΄ν 볡ꡬν μ μκ² PCBμ κΈ°λ‘. ν΄λΉ PCBλ₯Ό 컀λμ λ©λͺ¨λ¦¬μ μ μ₯νκ³ , μ μ νλ‘μΈμ€Bμ μ 보λ₯Ό λ©λͺ¨λ¦¬λ‘ μ μ¬νλ€. λ¬Έλ§₯ κ΅νμμλ μ΄λ€ νλ‘μΈμ€λ μνν μ μκΈ°μ μμν μ€λ²ν€λκ° λλ€. λλ¬Έμ λ¬Έλ§₯ κ΅νμ μ μ ν μκ°μ νλ κ²μ΄ μ€μ!
νλ‘μΈμ€ μμ± νλ‘μΈμ€λ νΈλ¦¬ ꡬ쑰μ΄λ©°, λΆλͺ¨ νλ‘μΈμ€κ° μμ νλ‘μΈμ€λ₯Ό μμ±νλ ννμ΄λ€. μμ€ν μ΄ λΆν λ λ κ°μ₯ μ΅μμ νλ‘μΈμ€μΈ systemdνλ‘μΈμ€κ° μμ±λλ€. (pid = 1)
μμ νλ‘μΈμ€λ λΆλͺ¨ νλ‘μΈμ€μ λ°μ΄ν°λ₯Ό 볡μ¬ν΄μ¨λ€.
μ λΆ λ³΅μ¬ν΄μ€μ§ μλ κ²½μ°λ μλ€. 리λ μ€μ κ²½μ°, μΌλ¨μ μμ νλ‘μΈμ€κ° λΆλͺ¨ νλ‘μΈμ€μ κ°μ μ£Όμλ₯Ό κ°λ¦¬ν€κ² νκ³ , μμ νλ‘μΈμ€κ° μλ‘μ΄ λ°μ΄ν°λ₯Ό μ¨μΌνλ μμ μ μ€μ λ‘ λ³΅μ¬λ₯Ό μννκ² νλ€.(copy on write) fork() λΆλͺ¨ νλ‘μΈμ€μμ μμ νλ‘μΈμ€λ₯Ό μμ±νλ μμ€ν μ½μ΄λ€.
fork()μ λ°νκ° μ°¨μ΄ λΆλͺ¨ νλ‘μΈμ€λ fork()μ λ°νκ°μ΄ μμ μ μμ΄λμ΄λ€. ( pid > 0) μμ νλ‘μΈμ€λ 0μ λ°ννλ€. exec() μμ νλ‘μΈμ€λ λΆλͺ¨ νλ‘μΈμ€μ μ£Όμ 곡κ°μ 볡μ¬ν΄μ¬ μ μλ€. κ·Έλ¬λ λΆλͺ¨ νλ‘μΈμ€μ μμ ν λ€λ₯Έ νλ‘κ·Έλ¨μ μμ νλ‘μΈμ€μμ μ€ννκ³ μΆλ€λ©΄, exec() μμ€ν μ½μ μ¬μ©νλ©΄ λλ€.
exec()λ₯Ό μ€ννλ©΄, νλ‘μΈμ€λ exec()μ λ§€κ°λ³μλ‘ λ€μ΄μ¨ νλ‘κ·Έλ¨μΌλ‘ μ νλλ€. λ©λͺ¨λ¦¬μ μ μ₯λ κ° μμ²΄κ° μ λΆ μ΄κΈ°νλκ³ μλ‘μ΄ νλ‘κ·Έλ¨μ κ°μ Έμ¨λ€. λλ¬Έμ exec()λ₯Ό μνν κ²½μ°, λΆλͺ¨ νλ‘μΈμ€μ λͺ¨λ μ£Όμλ₯Ό 볡μ¬ν΄μ€λ κ²μ λλΉμ΄λ€.
ex. execlp("/bin/ls", "ls", NULL) : μλ‘μ΄ νλ‘κ·Έλ¨μΈ bin/lsλ‘ μ ν. execlp()μ μλ μ½λλ μ€ννμ§ μμ.
wait() λΆλͺ¨ νλ‘μΈμ€λ μμ νλ‘μΈμ€μ λ³νν΄μ μμ μ μνν μλ μμ§λ§, wait()λ₯Ό μ¬μ©νμ¬ μμ νλ‘μΈμ€κ° μ’ λ£λ λκΉμ§ λκΈ°ν μλ μλ€.
exit() νλ‘μΈμ€λ₯Ό μ’ λ£νκΈ° μν΄ exit()λ₯Ό μ¬μ©νλ€. μμ νλ‘μΈμ€ μ€μ€λ‘ μΌμ λ€ λ§μ³ exit()λ μλ μκ³ , μΈλΆμμ μμ νλ‘μΈμ€λ₯Ό exit()μν¬ μλ μλ€.
μ’λΉ νλ‘μΈμ€μ κ³ μ νλ‘μΈμ€ μ’λΉ νλ‘μΈμ€ : μμ νλ‘μΈμ€λ μ’ λ£λμμ§λ§, λΆλͺ¨ νλ‘μΈμ€κ° μμ§ wait()λ₯Ό νΈμΆνμ§ μμ μν λΆλͺ¨ νλ‘μΈμ€μ μμ νλ‘μΈμ€λ₯Ό λ³νν΄μ μ€ννκ³ μΆλ€λ©΄ μΈμ waitλ₯Ό ν΄μΌνμ§? -> μμ νλ‘μΈμ€λ₯Ό λ°±κ·ΈλΌμ΄λλ‘ μ€νμν€λ©΄, μ’λΉ νλ‘μΈμ€κ° λμ§ μλλ€? -> μκ·Έλ νΈλ€λ§ : μμνλ‘μΈμ€κ° μ’ λ£λλ©΄ μκ·Έλ νΈλ€λ¬μκ² μκ·Έλ μ λ¬. μκ·Έλ νΈλ€λ¬μμ waitμν
κ³ μ νλ‘μΈμ€ : μμ νλ‘μΈμ€λ μ€νμ€μ΄μ§λ§, λΆλͺ¨ νλ‘μΈμ€κ° μ’ λ£λ μν νλ‘μΈμ€κ° ν΅μ (IPC) 곡μ λ©λͺ¨λ¦¬ λ°©μ : νλ‘μΈμ€κ° κ°μ μ£Όμ곡κ°μ 곡μ λ©μμ§ μ λ¬ λ°©μ : 컀λμ ν΅ν΄ λ©μμ§λ₯Ό μ λ¬ λ©μμ§ μ λ¬ λ°©μμ 컀λμ ν΅ν΄ μμ€ν μ½μ νΈμΆνλ λ± λΆκ°μ μΈ μμ μ΄ μ‘΄μ¬ν΄μ 곡μ λ©λͺ¨λ¦¬ λ°©μλ³΄λ€ λ리λ€. 곡μ λ©λͺ¨λ¦¬ λ°©μμ μ²μμ 곡μ λ©λͺ¨λ¦¬ μμμ ꡬμΆν λλ§ μμ€ν μ½ μ¬μ©.
λ©μμ§ μ λ¬ λͺ¨λΈμ μΆ©λμ ννΌν νμκ° μκΈ° λλ¬Έμ μ μ μμ λ°μ΄ν°λ₯Ό κ΅ννλ λ° μ μ©νλ€ λ μ λ λ―Έμ€ν 리 -> 곡μ λ©λͺ¨λ¦¬ λ°©μμ λ©λͺ¨λ¦¬μ μ μ‘ μλλ‘ μνν μ μκΈ°μ λλμ λ°μ΄ν°μ μ ν©νμ§λ§ λ©μμ§ μ λ¬ λ°©μμ 곡μ λ©λͺ¨λ¦¬ λ°©μμ λΉν΄ μλκ° λ λ리λ€. κ·ΈλκΉ λλμ λ°μ΄ν°λ₯Ό μ μ‘νλ©΄ μν΄λ€~ λΌλ μλ―Έ?... ...??
κ·ΈλΌ κ³΅μ λ©λͺ¨λ¦¬ λ°©μμ λ€λ₯Έ λ€νΈμν¬μ μνλ νλ‘μΈμ€λΌλ¦¬λ ν μ μλ건κ°? ν΄λΌμ°λ μ€ν λ¦¬μ§ κ°μ κ±Έ 곡μ λ©λͺ¨λ¦¬λΌκ³ μ°κΈ°μ§ μκ² μ§? "ν΅μ 곡μ λ©λͺ¨λ¦¬ μμμ 곡μ λ©λͺ¨λ¦¬ μΈκ·Έλ¨ΌνΈλ₯Ό μμ±νλ ν¬λ₯΄μΈμ€μ μ£Όμ 곡κ°μ μμΉνλ€"
곡μ λ©λͺ¨λ¦¬ μμ€ν μΌλ°μ μΌλ‘ ν νλ‘μΈμ€κ° λ€λ₯Έ νλ‘μΈμ€μ λ©λͺ¨λ¦¬μ μ κ·Όνλ κ²μ κΈμ§νμ§λ§, 곡μ λ©λͺ¨λ¦¬λ μμΈμ μΈ μΌμ΄μ€. λμμ λμΌν μμΉμ λ°μ΄ν°λ₯Ό μ°μ§ μλλ‘ μ± μμ ΈμΌ ν¨. (μ΄λ»κ² μ± μμ ΈμΌ ν μ§λ λμ€μ μλ €μ£Όκ² μ§ ...)
λ²νΌλ 곡μ λ©λͺ¨λ¦¬ λ°©μμ΄λ«, μμ°μ-μλΉμ λͺ¨λΈμμ μμ°μμ μλΉμ νλ‘μΈμ€λ€μ λ³νμΌλ‘ μ€ννλ €λ©΄ λ²νΌκ° μμ΄μΌνλ€. μμ°μλ λ²νΌμ λ°μ΄ν°λ₯Ό μ΄μ¬ν μμλκ³ , μλΉμλ λ²νΌμμ λ°μ΄ν°λ₯Ό κΊΌλ΄κ°μΌ λμ΄ λ³νμΌλ‘ μ€ν κ°λ₯.
λ©μμ§ μ λ¬ μμ€ν κ°μ μ£Όμ 곡κ°μ 곡μ νμ§ μκ³ λ νλ‘μΈμ€κ° ν΅μ μ΄ κ°λ₯ν κΈ°λ². send()μ receive() μμ€ν μ½ μ¬μ©
λͺ κ°μ§ νΉμ±λ€μ΄ μ‘΄μ¬.
μ§μ ν΅μ vs κ°μ ν΅μ λκΈ°μ vs λΉλκΈ°μ μλ λ²νΌλ§ vs λͺ μμ λ²νΌλ§ μ§μ ν΅μ μ§μ ν΅μ μ νΉμ νλ‘μΈμ€λ₯Ό μ§λͺ©ν΄μ 보λ΄λ λ°©μ(ex. νλ‘μΈμ€Pμ Qκ° ν΅μ μ€μΌ λ, send(P, message), receive(Q, message) )
λ νλ‘μΈμ€ μ¬μ΄μμλ§ ν΅μ μ΄ μΌμ΄λλ€.
νλ‘μΈμ€ μ΄λ¦μ΄ λ°λλ©΄, μ½λ μμ ν΄μΌν¨ (νλ‘μΈμ€ μ΄λ¦ : μ€ν νμΌ μ΄λ¦μ΄λ νλ‘μΈμ€ μμ± μμ μΈμ λ±μ μν΄ κ²°μ )
κ°μ ν΅μ νΉμ νλ‘μΈμ€λ₯Ό μ§λͺ©ν΄μ ν΅μ νμ§ μκ³ , λ©μΌ λ°μ€λ ν¬νΈλ₯Ό ν΅ν΄ ν΅μ .
νλ‘μΈμ€ μ¬μ΄μ λ©μΌλ°μ€λΌλ μ€κ° μ μ₯μκ° μ‘΄μ¬
λ©μΌλ°μ€μ μμ΄λκ° μ‘΄μ¬. λ©μΌλ°μ€ Aκ° μμ λ, send(A, message), receive(A, message)μμΌλ‘ ν΅μ .
λ©μΌλ°μ€λ ν νλ‘μΈμ€ λλ μ΄μ체μ μ μν΄ μμ λ μ μλ€.
νλ‘μΈμ€μ μν΄ μμ λλ€λ©΄, κ·Έ λ©μΌλ°μ€λ νλ‘μΈμ€μ μ£Όμ κ³΅κ° μΌλΆ. μ¦, νλ‘μΈμ€κ° μ’ λ£λ λ λ©μΌλ°μ€λ μ¬λΌμ§λ€. μλ λ²νΌλ§ & λͺ μμ λ²νΌλ§ νλ‘μΈμ€λ€κ° κ΅νλλ λ©μμ§λ€μ μμ νμ λ€μ΄κ°λ€. νλ₯Ό ꡬννλ λ°©μμ μΈ κ°μ§κ° μλ€.
무μ©λ : νμ κΈΈμ΄κ° 0. λκΈ° λΆκ°λ₯. μ‘μ μλ μμ μκ° λ©μμ§λ₯Ό μμ ν λκΉμ§ κΈ°λ€λ €μΌν¨. μ ν μ©λ : νμ κΈΈμ΄κ° μ ν. μ΅λ κ°μκΉμ§ μ°¨λ©΄ μ‘μ μλ κΈ°λ€λ €μΌν¨. 무ν μ©λ : νμ κΈΈμ΄κ° 무ν. 무μ©λμ λ²νΌκ° μλ λ©μμ§ μμ€ν μ΄λΌκ³ λΆλ₯Έλ€. μ ν μ©λκ³Ό 무ν μ©λμ μλ λ²νΌλ§μ΄λΌκ³ λΆλ₯Έλ€.
νκ° λ€ μ°Όμ λ μ λ΅.
무기ν κΈ°λ€λ¦Ό μ΅λ nλ°λ¦¬μ΄λμ κΈ°λ€λ¦Ό κΈ°λ€λ¦¬μ§ μκ³ μ¦μ λ³΅κ· λ©μμ§λ₯Ό μΌμμ μΌλ‘ μΊμ - μ΄μ체μ μ μ λ¬νμ¬ λ³΄μ‘΄. λ©μμ§ μ λ¬ μμ€ν μμ1 - νμ΄ν νμ΄νλ λ³΄ν΅ λ¨λ°©ν₯ ν΅μ μ μ§μνλ©°, λΆλͺ¨μ μμ νλ‘μΈμ€ μ¬μ΄μ μ¬μ©λλ κ²μ΄ μΌλ°μ μ΄λ€.
νμ΄ν μ€κ³μ κ³ λ €ν΄μΌν κ² λ¨λ°©ν₯ vs μλ°©ν₯ λ°μ΄μ€ vs μ μ΄μ€ (λ°μ΄μ€μ ν μκ°μ ν λ°©ν₯μΌλ‘λ§ μ μ‘ κ°λ₯, μ μ΄μ€μ λμμ μλ°©ν₯μΌλ‘ μ μ‘ κ°λ₯) νλ‘μΈμ€κ° λΆλͺ¨-μμκ°μ κ΄κ³κ° μ‘΄μ¬νλ κ° κ°μ μ»΄ν¨ν°μμ νλ‘μΈμ€μΈκ°? λΆμ° νκ²½μ νλ‘μΈμ€μΈκ°? μΌλ° νμ΄ν(μ΅λͺ νμ΄ν) μμ°μ-μλΉμ ννμ νμ΄ν. μμ°μλ νμ΄νμ ν μ’ λ¨μ λ°μ΄ν°λ₯Ό μ°κ³ , μλΉμλ λ°λ μ’ λ¨μμ μ½λλ€. μΌλ° νμ΄νλ νμͺ½μΌλ‘λ§ λ°μ΄ν°λ₯Ό μ μ‘ν μ μμΌλ©°, λ¨λ°©ν₯ ν΅μ λ§ κ°λ₯νλ€. (μλ°©ν₯ ν΅μ νκ³ μΆμΌλ©΄ νμ΄ν λ κ° λ§λμ )
μΌλ° νμ΄νλ νμ΄νλ₯Ό μμ±ν νλ‘μΈμ€μΈμλ μ κ·Όν μ μλ€. κ·Έλμ λΆλͺ¨-μμ νλ‘μΈμ€λ€λΌλ¦¬ ν΅μ νλ λ° μ°μ. (μμ νλ‘μΈμ€λ λΆλͺ¨ νλ‘μΈμ€λ‘λΆν° μ΄λ¦° νμΌμ μμλ°λλ€.)
(μμμμ μ€λͺ ν΄μ£Όλ νμ΄νλ νμΌμΈλ°, νμΌ ννλ§ μλμ§λ λͺ¨λ₯΄κ² μ)
μ§λͺ νμ΄ν μΌλ° νμ΄νλ νλ‘μΈμ€λ€μ΄ ν΅μ νλ λμμλ§ μ‘΄μ¬. (ν΅μ νλ λ νλ‘μΈμ€λ€μ΄ μ ν΄μ Έμμ) μ§λͺ νμ΄νλ νλ‘μΈμ€κ° μ’ λ£λμ΄λ κ³μ μ‘΄μ¬ν¨. μ§λͺ νμ΄νλ μ¬λ¬ νλ‘μΈμ€λ€μ΄ μ¬μ©ν μ μλ νμ΄νμ. (λΆλͺ¨-μμ κ΄κ³ νμ μμ)
λ©μμ§ μ λ¬ μμ€ν μμ1 - μμΌ μμΌμ λ€νΈμν¬ νλ‘κ·Έλλ°μμ μ£Όλ‘ μ¬μ©λλ IPCλ°©λ².(λ‘컬μμλ μΈ μ μκΈ΄ν¨) μμΌμ ν΅μ μ κ·Ήμ μ μλ―Έν¨. λ νλ‘μΈμ€κ° λ€νΈμν¬μμμ ν΅μ νλ €λ©΄ λ κ°μ μμΌμ΄ νμ. μμΌμ IPμ£Όμμ ν¬νΈλ²νΈ λ κ°μ§λ‘ ꡬλ³ν¨.
ν΄λΌμ΄μΈνΈ νλ‘μΈμ€κ° μ°κ²°μ μμ²νλ©΄, νΈμ€νΈ νλ‘μΈμ€κ° ν¬νΈ λ²νΈλ₯Ό λΆμ¬. (μ΄λ ν¬νΈ λ²νΈλ 1024λ³΄λ€ ν° μ μμΈλ° μμΌμ©μΌλ‘ μ ν΄λλ―)
μμΌμ λΆμ° νκ²½μμ λ리 μ¬μ©λμ§λ§, μ μμ€ ν΅μ λ°©λ²μ΄λ€. μ€λ λκ°μ ꡬ쑰νλμ§ μμ λ°μ΄νΈ μ€νΈλ¦Όλ§μ ν΅μ νκΈ° λλ¬Έ! (κ·Έλλ μ±ν μμ κ°κΏμ΄μ£ ?) λμμΌλ‘ λ λμ μμ€μ ν΅μ κΈ°λ²μΈ RPCκ° μ‘΄μ¬ν¨.
RPC(μ격 νλ‘μμ νΈμΆ) νλ‘μμ : κ± μ½λ μ§ν©. ν¨μλΌκ³ 보면 λ¨. λ€νΈμν¬λ₯Ό ν΅ν΄μ ν¨μλ₯Ό νΈμΆνλ λ°©λ².
IPC λ°©μκ³Όλ λ¬λ¦¬ RPC ν΅μ μμ μ λ¬λλ λ©μμ§λ ꡬ쑰ν λμ΄μλ€. λ©μμ§ κ΅¬μ±μμ
ν€λ : λ©μμ§ κΈΈμ΄, λ©μμ§ μ ν, μΈμ¦μ 보 λ± μκ²©μ§ ν¬νΈμμ listenμ€μΈ RPC demonμ μ£Όμκ° μ§μ μ€νν ν¨μμ μλ³μ ν¨μμ λ€μ΄κ° λ§€κ°λ³μ RPC vs REST API by μ±μ§νΌν°λ
RPC (Remote Procedure Call) νΉμ§: Procedure-Centric: RPCλ νλ‘μμ μ€μ¬μ μ λλ€. ν΄λΌμ΄μΈνΈκ° μλ²μ νΉμ ν¨μ λλ νλ‘μμ λ₯Ό μ격μΌλ‘ νΈμΆνκ³ , κ²°κ³Όλ₯Ό λ°λ λ°©μμ λλ€.
λ°μ΄ν° μ μ‘ ν¬λ§·: μ£Όλ‘ Protocol Buffers, Thrift, gRPC λ±κ³Ό κ°μ μ΄μ§ λ°μ΄ν° ν¬λ§·μ μ¬μ©ν©λλ€. μ΄λ λ°μ΄ν°λ₯Ό ν¨μ¨μ μΌλ‘ μ§λ ¬ννμ¬ μ μ‘ν©λλ€. μνλ₯Ό κ°μ§ μ μμ: RPCλ μνλ₯Ό κ°μ§ μ μμΌλ©°, μΌλΆ νλ μμν¬λ μ°κ²°μ ν΅ν μν μ μ§λ₯Ό μ 곡ν©λλ€. μ¬μ© μλ리μ€: μ±λ₯μ΄ μ€μν μν©: RPCλ λ°μ΄ν°μ ν¨μ¨μ μΈ μ μ‘κ³Ό λΉ λ₯Έ μλ΅ μκ°μ κ°μ‘°νλ―λ‘, μ±λ₯μ΄ μ€μν μν©μμ μ ν©ν©λλ€. λ΄λΆ λ§μ΄ν¬λ‘μλΉμ€ ν΅μ : λ΄λΆ λ§μ΄ν¬λ‘μλΉμ€ κ°μ ν΅μ μ λ§μ΄ μ¬μ©λ©λλ€. μ΄μ§ λ°μ΄ν° μ μ‘μ΄ νμν κ²½μ°: μ΄λ―Έμ§, λΉλμ€ λ±κ³Ό κ°μ λ°μ΄λ리 λ°μ΄ν°λ₯Ό ν¨κ³Όμ μΌλ‘ μ²λ¦¬ν μ μμ΅λλ€. REST API (Representational State Transfer API) νΉμ§: Resource-Centric: REST APIλ μμ μ€μ¬μ μ λλ€. κ° μμμ κ³ μ ν URIλ₯Ό κ°μ§λ©°, HTTP λ©μλ(GET, POST, PUT, DELETE)λ₯Ό μ¬μ©νμ¬ μνλ₯Ό μ μ‘ν©λλ€. λ°μ΄ν° μ μ‘ ν¬λ§·: μ£Όλ‘ JSON νμμ μ¬μ©ν©λλ€. μ΄λ μ¬λμ΄ μ½κ³ μ°κΈ° μ½κ³ , λΈλΌμ°μ μμλ μ²λ¦¬νκΈ° νΈλ¦¬ν©λλ€. 무μν(Stateless): RESTλ μνλ₯Ό μ μ₯νμ§ μλ 무μν μν€ν μ²λ₯Ό κ°μ§λ©°, κ° μμ²μ λͺ¨λ νμν μ 보λ₯Ό ν¬ν¨νκ³ μμ΄μΌ ν©λλ€. μ¬μ© μλ리μ€: μΉ μ ν리μΌμ΄μ κ°λ°: RESTλ μ£Όλ‘ μΉ μ ν리μΌμ΄μ κ°λ°μμ μ¬μ©λλ©°, ν΄λΌμ΄μΈνΈ-μλ² κ°μ ν΅μ μ κ°λ¨νκ² μ μ§ν μ μμ΅λλ€. ν΄λΌμ΄μΈνΈκ° μνλ₯Ό κ΄λ¦¬νλ κ²½μ°: RESTλ 무μν μν€ν μ²μ΄λ―λ‘ ν΄λΌμ΄μΈνΈκ° μνλ₯Ό κ΄λ¦¬ν΄μΌ νλ κ²½μ°μ μ ν©ν©λλ€. HTTP λ©μλ νμ©: RESTλ HTTP λ©μλλ₯Ό μ¬μ©νμ¬ κ°λ¨νκ² CRUD(Create, Read, Update, Delete) κΈ°λ₯μ μ 곡ν μ μμ΅λλ€. μΈμ μ΄λ€ κ²μ μ νν΄μΌ ν κΉμ? 볡μ‘μ± λ° ν¨μ¨μ±: RPCλ μ±λ₯μ΄ μ€μνκ³ , μ§λ ¬νλ μ΄μ§ λ°μ΄ν°λ₯Ό μ¬μ©ν μ μμ΅λλ€. RESTλ κ°λ¨νκ³ μ μ°νμ§λ§, λ°μ΄ν°λ μ£Όλ‘ ν μ€νΈ νμμΈ JSONμ μ¬μ©νλ―λ‘ μ§λ ¬ν λ° νμ± μ€λ²ν€λκ° μμ μ μμ΅λλ€. μν μ 무: RPCλ μνλ₯Ό κ°μ§ μ μμ§λ§, RESTλ 무μνμ λλ€. ν΄λΌμ΄μΈνΈκ° μνλ₯Ό μ μ§ν΄μΌ νλμ§ μ¬λΆμ λ°λΌ μ νν μ μμ΅λλ€. νμ€νλ νλ‘ν μ½: RPCλ νλ μμν¬μ λ°λΌ λ€λ₯Έ νλ‘ν μ½μ μ¬μ©ν μ μμ§λ§, RESTλ HTTPλ₯Ό μ¬μ©νλ―λ‘ νμ€νλ νλ‘ν μ½μ μ¬μ©ν©λλ€.