RPC๋?
์๊ฒฉ ํ๋ก์์ ํธ์ถ(remote procedure call, RPC)์ ๋ณ๋์ ์๊ฒฉ ์ ์ด๋ฅผ ์ํ ์ฝ๋ฉ ์์ด ๋ค๋ฅธ ์ฃผ์ ๊ณต๊ฐ์์ ํจ์๋ ํ๋ก์์ ๋ฅผ ์คํํ ์ ์๊ฒํ๋ ํ๋ก์ธ์ค ๊ฐ ํต์ ๊ธฐ์ ์ด๋ค. ๋ค์ ๋งํด, ์๊ฒฉ ํ๋ก์์ ํธ์ถ์ ์ด์ฉํ๋ฉด ํ๋ก๊ทธ๋๋จธ๋ ํจ์๊ฐ ์คํ ํ๋ก๊ทธ๋จ์ ๋ก์ปฌ ์์น์ ์๋ ์๊ฒฉ ์์น์ ์๋ ๋์ผํ ์ฝ๋๋ฅผ ์ด์ฉํ ์ ์๋ค.
๊ฐ์ฒด ์งํฅ์ ์์น์ ์ฌ์ฉํ๋ ์ํํธ์จ์ด์ ๊ฒฝ์ฐ ์๊ฒฉ ํ๋ก์์ ํธ์ถ์ ์๊ฒฉ ํธ์ถ(remote invocation) ๋๋ ์๊ฒฉ ๋ฉ์๋ ํธ์ถ(remote method invocation)์ด๋ผ๊ณ ์ผ์ปซ๋๋ค.
์ถ์ฒ: ์ํค๋ฐฑ๊ณผ
RPC vs REST
RPC | REST | |
๋ฌด์์ธ๊ฐ์? | ์๊ฒฉ ํด๋ผ์ด์ธํธ์์ ์๋ฒ์ ํ๋ก์์ ๋ฅผ ๋ง์น ๋ก์ปฌ์ธ ๊ฒ์ฒ๋ผ ์ง์ ์ ์ผ๋ก ํธ์ถํ ์ ์๊ฒ ํ๋ ์์คํ ์ ๋๋ค. | ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์ ํ ๋ฐ์ดํฐ ๊ตํ์ ์ ์ํ๋ ์ผ๋ จ์ ๊ท์น์ ๋๋ค. |
์ฉ๋ | ์๊ฒฉ ์๋ฒ์์ ์์ ์ ์ํํฉ๋๋ค. | ์๊ฒฉ ๊ฐ์ฒด์ ๋ํ ์์ฑ, ์ฝ๊ธฐ, ์ ๋ฐ์ดํธ ๋ฐ ์ญ์ (CRUD) ์์ ์ ์ํํฉ๋๋ค. |
๊ฐ์ฅ ์ ํฉํ ์ฌ์ฉ ์ฌ๋ก | ๋ณต์กํ ๊ณ์ฐ์ด ํ์ํ๊ฑฐ๋ ์๋ฒ์์ ์๊ฒฉ ํ๋ก์ธ์ค๋ฅผ ํธ๋ฆฌ๊ฑฐํ๋ ๊ฒฝ์ฐ | ์๋ฒ ๋ฐ์ดํฐ ๋ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ท ์ผํ๊ฒ ๋ ธ์ถํด์ผ ํ๋ ๊ฒฝ์ฐ |
์ํ ์ ์ง ์ฌ๋ถ | ์ํ ์ ์ง ๋๋ ๋ฌด์ํ | ๋ฌด์ํ |
๋ฐ์ดํฐ ์ ๋ฌ ํ์ | ์๋ฒ์์ ์ ์ํ๊ณ ํด๋ผ์ด์ธํธ์ ์ ์ฉ๋๋ ์ผ๊ด๋ ๊ตฌ์กฐ | ์๋ฒ์ ์ํด ๋ ๋ฆฝ์ ์ผ๋ก ๊ฒฐ์ ๋๋ ๊ตฌ์กฐ. ๋์ผํ API ๋ด์์ ์ฌ๋ฌ ํ์์ ์ ๋ฌํ ์ ์์ต๋๋ค. |
RPC ๋์ ๋ฐฉ๋ฒ
- Client, Client Stub ๋ฐ RPC ๋ฐํ์์ ์ธ์คํด์ค๋ ๋ชจ๋ ํด๋ผ์ด์ธํธ ๊ธฐ๊ธฐ์์ ์คํ ์ค์ด๋ค.
- Client๋ ์ผ๋ฐ์ ์ธ ๋งค๊ฐ๋ณ์๋ก Client Stub ํ๋ก์ธ์ค๋ฅผ ์์ํ๋ค. Client Stub์ ํด๋ผ์ด์ธํธ์ ์ฃผ์ ๊ณต๊ฐ์์ ์ ์ฅ์๋ฅผ ํ๋ณดํ๋ค.
- ์ด ์์ ์์ ์ฌ์ฉ์๋ ์ผ๋ฐ ๋ก์ปฌ ํ๋ก์์ ํธ์ถ์ ์ฌ์ฉํ์ฌ RPC์ ์ก์ธ์คํ ์ ์๋ค. RPC ๋ฐํ์์ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ๋ฉ์์ง ์ ์ก์ ๋ด๋นํ๋ค. ์ฌ์ ์ก, ํ์ธ, ๋ผ์ฐํ ๋ฐ ์ํธํ๋ ๋ชจ๋ ์ด์ ์ํด ์ํ๋๋ค.
- Server ์ธก์์๋ ์์ ์ด ์๋ฃ๋ ํ ๊ฒฐ๊ณผ ๊ฐ์ด Server Stub์ ๋ฐํ๋๊ณ , ์ดํ Server Stub์ด ๋ฐํ ๊ฐ์ ๋ฉ์์ง๋ก ํจํน(marshalling)ํฉ๋๋ค. ์ ์ก ๊ณ์ธต์ Server Stub์ผ๋ก๋ถํฐ ๋ฉ์์ง๋ฅผ ์์ ํฉ๋๋ค.
- ๊ฒฐ๊ณผ ๋ฉ์์ง๋ ์ ์ก ๊ณ์ธต์ ์ํด Client ์ ์ก ๊ณ์ธต์ผ๋ก ์ ์ก๋๊ณ , Client Stub์ผ๋ก ๋ค์ ๋ฉ์์ง๊ฐ ์ ์ก๋ฉ๋๋ค.
- Client Stub์ ๊ฒฐ๊ณผ ํจํท์์ ๋ฐํ ์ธ์๋ฅผ ์ธํจํน(unmarshalling)ํ๊ณ , ์ด ์์ ์์ ์คํ ํ๋ก์ธ์ค๊ฐ ํธ์ถ์์๊ฒ ๋์๊ฐ๋๋ค.
Stub
๋จ์ด ์์ฒด๋ 'ํ ๋ง'์ด๋ผ๋ ๋ป์ด๋ค.
ํ
์คํธ, ๋ถ์ฐ ์์คํ
๋ฑ ๋ค์ํ ๋ถ์ผ์์ ์ฌ์ฉ๋๋ ๋จ์ด์ง๋ง, ๊ณตํต์ ์ ๊ตณ์ด ์ฐ์ํด๋ณด์๋ฉด,
๋ฉ์๋๋ ์์ง๋ง, ๋ก์ง์ ์๋ ๋ง์ ๊ฒ์ '์๋ผ๋ธ' ์ํ์ ๋ฌด์ธ๊ฐ๋ผ๋ ๋๋์ด ์๋ค.
RPC with IDL
Thrift
Thrift๋ RPC๋ฅผ ์ํ ์ฐ๊ด๋ ์ฝ๋ ์์ฑ ๋ฉ์ปค๋์ฆ๊ณผ ํจ๊ป ๊ฒฝ๋์ด๋ฉฐ ์ธ์ด ๋ ๋ฆฝ์ ์ธ ์ํํธ์จ์ด ์คํ์ ๋๋ค. Thrift๋ ๋ฐ์ดํฐ ์ ์ก, ๋ฐ์ดํฐ ์ง๋ ฌํ ๋ฐ ์์ฉ ํ๋ก๊ทธ๋จ ์์ค์ ์ฒ๋ฆฌ๋ฅผ ์ํ ๊น๋ํ ์ถ์ํ๋ฅผ ์ ๊ณตํฉ๋๋ค. Thrift๋ ์๋ Facebook์์ ๊ฐ๋ฐ๋์์ผ๋ฉฐ ํ์ฌ๋ Apache ํ๋ก์ ํธ๋ก ์คํ ์์คํ๋์์ต๋๋ค. Apache Thrift๋ ๋ฐ์ดํฐ ์ ํ ๋ฐ ์๋น์ค ์ธํฐํ์ด์ค๋ฅผ ๊ฐ๋จํ ์ ์ ํ์ผ์์ ์ ์ํ๊ธฐ๋ง ํ๋ฉด ๊ฐ๋ฐ์๊ฐ RPC ํด๋ผ์ด์ธํธ ๋ฐ ์๋ฒ๋ฅผ ๊ตฌ์ถํ ์ ์๋๋ก ํ๋ ์ผ๋ จ์ ์ฝ๋ ์์ฑ ๋๊ตฌ์ ๋๋ค. ์ด ํ์ผ์ ์ ๋ ฅ์ผ๋ก ์ ๊ณตํ๋ฉด ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ํก๋จํ๋ RPC ํด๋ผ์ด์ธํธ ๋ฐ ์๋ฒ๋ฅผ ๋น๋ํ๊ธฐ ์ํ ์ฝ๋๊ฐ ์์ฑ๋ฉ๋๋ค.
Finagle
Finagle๋ JVM์ ์ํ ํ๋กํ ์ฝ์ ์ค๋ฆฝ์ ์ด๋ฉฐ ๋น๋๊ธฐ RPC ์์คํ ์ผ๋ก, Java, Scala ๋๋ ๊ธฐํ JVM ํธ์คํ ์ธ์ด๋ก ๊ฐ๋ ฅํ ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ฅผ ์ฝ๊ฒ ๊ตฌ์ถํ ์ ์๊ฒ ํด์ค๋๋ค.
twitter.com์์ ์ฌ์ง์ด ๊ฐ์ฅ ๊ฐ๋จํ ์น ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋ ค๋ฉด ๋ง์ ๋ค๋ฅธ ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ ์์ญ ๊ฐ์ ๋คํธ์ํฌ ์๋น์ค์ ํ๋ ฅ์ด ํ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํ ํ์ด์ง๋ฅผ ๋ ๋๋งํ๋ ค๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ๊ทธ๋ํ ์๋น์ค, Memcached, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ๊ธฐํ ๋ง์ ๋คํธ์ํฌ ์๋น์ค์ ์์ฒญ์ ๋ณด๋ ๋๋ค. ์ด๋ค ๊ฐ๊ฐ์ Thrift, Memcached, MySQL ๋ฑ ๋ค๋ฅธ ํ๋กํ ์ฝ์ ์ฌ์ฉํฉ๋๋ค. ๋ํ, ์ด๋ฌํ ๋ง์ ์๋น์ค ์ค ์ผ๋ถ๋ ๋ค๋ฅธ ์๋น์ค์ ํต์ ํฉ๋๋ค. ์ฆ, ์๋ฒ์ด์ ํด๋ผ์ด์ธํธ์ ๋๋ค. ์๋ฅผ ๋ค์ด, ์์ ๊ทธ๋ํ ์๋น์ค๋ Thrift ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ์ง๋ง MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ํด๋ฌ์คํฐ์์ ์๋นํฉ๋๋ค.
์ด๋ฌํ ์์คํ ์์ ๊ณ ์ฅ์ ๋น๋ฐ์ ์ธ ์์ธ ์ค ํ๋๋ ์ฅ์ ๋ฐ์ ์ ๊ตฌ์ฑ ์์ ๊ฐ ์ํธ ์์ฉ์ด ๋ถ์กฑํ ๊ฒ์ ๋๋ค. ์ผ๋ฐ์ ์ธ ์ฅ์ ์๋ ์ถฉ๋ํ ํธ์คํธ ๋ฐ ๊ทน๋จ์ ์ธ ์ง์ฐ ๋ณ๋์ด ํฌํจ๋ฉ๋๋ค. ์ด๋ฌํ ์ฅ์ ๋ ์์ ๋๊ธฐ์ด์ด ๋ฐฑ์ ๋๊ฑฐ๋ TCP ์ฐ๊ฒฐ์ด ๋ณ๋๋๊ฑฐ๋ ๋ฉ๋ชจ๋ฆฌ ๋ฐ ํ์ผ ๋์คํฌ๋ฆฝํฐ๊ฐ ๊ณ ๊ฐ๋์ด ์์คํ ์ ํตํด ์ ํ๋ ์ ์์ต๋๋ค. ์ต์ ์ ๊ฒฝ์ฐ ์ฌ์ฉ์๋ ์ฅ์ ํ๋ฉด์ ๋ณด๊ฒ ๋ฉ๋๋ค.
์ ๊ตํ ๋คํธ์ํฌ ์๋ฒ์ ํด๋ผ์ด์ธํธ๋ ๋ค์ํ ๋ถ๋ถ๋ค์ด ์์ง์ ๋๋ค: ์ฅ์ ํ์ง๊ธฐ, ๋ถํ ๋ถ์ฐ๊ธฐ, ์ฅ์ ์กฐ์น ์ ๋ต ๋ฑ์ด ์์ต๋๋ค. ์ด๋ฌํ ๋ถ๋ถ๋ค์ ๋๊ท๋ชจ ํ๋ก๋์ ์์คํ ์์ ๋ฐ์ํ๋ ๋ค์ํ ์ฅ์ ์ ๊ฒฌ๊ณ ํ๊ฒ ๋์ํ๊ธฐ ์ํด ์๋ก ์ฌ์ธํ ๊ท ํ ์์์ ํจ๊ป ์๋ํด์ผ ํฉ๋๋ค. ํนํ, ํ๋กํ ์ฝ๋ง๋ค ๋ค์ํ ์ฅ์ ํ์ง๊ธฐ, ๋ถํ ๋ถ์ฐ๊ธฐ ๋ฑ์ ๊ตฌํ์ด ์์ด์ ์ด๋ฅผ ์กฐ์จํ๋ ๊ฒ์ด ๋งค์ฐ ์ด๋ ต์ต๋๋ค. ์๋ฅผ ๋ค์ด, Thrift์ back-pressure ์ ๋ต์ ๊ตฌํ์ HTTP์ ๊ฒ๊ณผ ๋ค๋ฆ ๋๋ค. ์ด์ง์ ์ธ ์์คํ ์ด ์ฌ๊ฑด ๋ฐ์ ์ค์ ์์ ๋ ์ํ๋ก ์๋ ดํ๋๋ก ๋ณด์ฅํ๋ ๊ฒ์ ๋งค์ฐ ์ด๋ ค์ด ์์ ์ ๋๋ค.
์ฐ๋ฆฌ๋ ๋ชจ๋ ํ๋กํ ์ฝ์ ์ฌ์ฉํ ์ ์๋ ๋คํธ์ํฌ ์๋ฒ์ ํด๋ผ์ด์ธํธ์ ๊ธฐ๋ณธ ๊ตฌ์ฑ ์์์ ๋จ์ผ ๊ตฌํ์ฒด๋ฅผ ๊ฐ๋ฐํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. Finagle์ Java Virtual Machine (JVM)์ ์ํ ํ๋กํ ์ฝ์ ์ค๋ฆฝ์ ์ด๋ฉฐ ๋น๋๊ธฐ ์๊ฒฉ ํ๋ก์์ ํธ์ถ(RPC) ์์คํ ์ผ๋ก, Java, Scala ๋๋ JVM ํธ์คํธ ์ธ์ด์์ ๊ฐ๋ ฅํ ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ฅผ ์ฝ๊ฒ ๊ตฌ์ถํ ์ ์์ต๋๋ค. Finagle์ ๋ค์ํ ์์ฒญ/์๋ต ์งํฅ RPC ํ๋กํ ์ฝ๊ณผ ๋ค์ํ ์คํธ๋ฆฌ๋ฐ ํ๋กํ ์ฝ ํด๋์ค๋ฅผ ์ง์ํฉ๋๋ค.
Finagle์ ๋ค์๊ณผ ๊ฐ์ ๊ฐ๋ ฅํ ๊ตฌํ์ ์ ๊ณตํฉ๋๋ค:
- ์ฐ๊ฒฐ ํ: TCP ์ฐ๊ฒฐ ๋ณ๋์ ํผํ๊ธฐ ์ํ ์ค๋กํ๋ง์ด ํฌํจ๋ฉ๋๋ค.
- ์ฅ์ ํ์ง๊ธฐ: ๋๋ฆฐ ๋๋ ์ถฉ๋ํ ํธ์คํธ๋ฅผ ์๋ณํฉ๋๋ค.
- ์ฅ์ ์กฐ์น ์ ๋ต: ๊ฑด๊ฐํ์ง ์์ ํธ์คํธ๋ก๋ถํฐ ํธ๋ํฝ์ ์ ์ดํฉ๋๋ค.
- ๋ก๋ ๋ฐธ๋ฐ์: "์ต์ ์ฐ๊ฒฐ" ๋ฐ ๊ธฐํ ์ ๋ต์ ํฌํจํฉ๋๋ค.
- ๋ฐฑํ๋ ์ ๊ธฐ์ : ์๋ฒ๋ฅผ ๋จ์ฉํ๋ ํด๋ผ์ด์ธํธ ๋ฐ ๋๊ทธํ์ผ๋ง์ ๋๋นํฉ๋๋ค.
๋ํ, Finagle์ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ์๋น์ค๋ฅผ ๋ ์ฝ๊ฒ ๊ตฌ์ถํ๊ณ ๋ฐฐํฌํ ์ ์์ต๋๋ค:
- ํ์ค ํต๊ณ, ๋ก๊ทธ ๋ฐ ์์ธ ๋ณด๊ณ ์๋ฅผ ๊ฒ์ํ๋ ์๋น์ค ๊ตฌ์ถ ์ฉ์ด์ฑ
- ํ๋กํ ์ฝ ๊ฐ ๋ถ์ฐ ์ถ์ (Dapper์ ์ ์ฌ)
- ํด๋ฌ์คํฐ ๊ด๋ฆฌ๋ฅผ ์ํด ์ต์ ์ผ๋ก ZooKeeper ์ฌ์ฉ
- ์ผ๋ฐ์ ์ธ ์ค๋ฉ ์ ๋ต ์ง์
์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ์ ์์ ์ด ์ฑ๊ณผ๋ฅผ ๊ฑฐ๋์๋ค๊ณ ๋ฏฟ์ต๋๋ค - ์ด์ ํจ์ฌ ๋ ์ฝ๊ณ ์์ ํ๊ฒ ๋คํธ์ํฌ ์๋น์ค๋ฅผ ์์ฑํ๊ณ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
Finagle & Thrift
Thrift
- Thrift๋ RPC ํ๋ ์์ํฌ๋ก, ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ํต์ ์ ์ํ ํ๋กํ ์ฝ์ ์ ์ํ๊ณ ๊ตฌํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
- Thrift๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ ์๋น์ค์ API๋ฅผ ์ ์ํ๊ณ , ๋ฐ์ดํฐ ํ์ ์ ์ ์ธํ๋ฉฐ, ํ๋กํ ์ฝ์ ์ค์ ํ ์ ์๋ค.
- ์๋น์ค์ ์ธํฐํ์ด์ค ์ ์ ๋ฐ ์๋น์ค ๋ฉ์๋๋ฅผ Thrift IDL(Interface Definition Language)์ ํตํด ์์ฑํ๊ณ , Thrift ์ปดํ์ผ๋ฌ ์ฌ์ฉํ์ฌ ๋ค์ํ ์ธ์ด๋ก ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
- ์๋น์ค ๊ฐ์ ํต์ ์ ์ํ ํ์คํ๋ ํ๋กํ ์ฝ์ ์ ์ํ๊ณ , ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ํต์ ์ ์ฒ๋ฆฌํ๋ค.
Finagle
- Finagle์ RPC ์์คํ ์ ๊ตฌ์ถํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ํ๋ ์์ํฌ๋ก, ๋น๋๊ธฐ ๋คํธ์ํฌ ์๋ฒ์ ํด๋ผ์ด์ธํธ๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
- Finagle์ ์ฌ์ฉํ๋ฉด ์๋น์ค ๊ฐ์ ํต์ ์ ๊ด๋ฆฌํ๊ณ , ์๋น์ค์ ์ฑ๋ฅ ๋ฐ ์์ ์ฑ์ ์ ์งํ ์ ์๋ค.
- Finagle์ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ๋คํธ์ํฌ ์๋ฒ ๋ฐ ํด๋ผ์ด์ธํธ์ ๊ฐ๋ฐ์ ๋จ์ํํ๊ณ , ์คํจ ์ฒ๋ฆฌ, ๋ถํ ๋ถ์ฐ, ๋ก๊น ๋ฑ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- Thrift๋ฅผ ํตํด ์ ์๋ ์๋น์ค์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ฅผ ๊ตฌํํ๊ณ , ์ด๋ค ๊ฐ์ ํต์ ์ ๊ด๋ฆฌํ๋ฉฐ, ์ฅ์ ์ฒ๋ฆฌ ๋ฐ ๋ถํ ๋ถ์ฐ์ ์ํํ๋ค.
๋ฐ๋ผ์, Thrift๋ ์๋น์ค์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๊ณ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ํต์ ์ ์ฒ๋ฆฌํ๋ ๋ฐ๋ฉด, Finagle์ ์ด๋ฌํ ์๋น์ค์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ฅผ ๊ตฌ์ถํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ํจ๊ป ์ฌ์ฉ๋๋ฉด, Thrift๋ก ์ ์๋ ์๋น์ค๋ฅผ Finagle์ ํตํด ๊ตฌํํ๊ณ ์ด์ํ ์ ์๋ค.
'๐ป > MLOps' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Kubernetes API ํด๋ผ์ด์ธํธ ์ฌ์ฉ (0) | 2024.02.23 |
---|---|
stern : ๋ถ์ฐ ์ฒ๋ฆฌ ํ๋ซํผ ๋ชจ๋ํฐ๋ง (0) | 2024.02.23 |
[k8s] `kubectl top` (0) | 2024.01.02 |
Apache Cassandra (0) | 2023.07.31 |
[Pinot] ์คํ์์ค ๊ธฐ์ฌ ํ๋ก์ธ์ค (0) | 2023.03.05 |