๋ฐ์ํ
RPC๋
- Remote Procedure Call
- ๋คํธ์ํฌ ์์ ๋ค๋ฅธ ์๋ฒ๋ ์์คํ ์ ์๋ ๊ธฐ๋ฅ์ ๋ง์น ๋ก์ปฌ ๊ธฐ๋ฅ์ฒ๋ผ ํธ์ถํ ์ ์๊ฒ ํด์ฃผ๋ ํ๋กํ ์ฝ
- ํด๋ผ์ด์ธํธ๊ฐ ๋ก์ปฌ ํจ์ ํธ์ถ -> ์์ฒญ์ด ์ง๋ ฌํ ๋์ด ๋คํธ์ํฌ๋ก ์ ์ก -> ์๊ฒฉ ์๋ฒ๊ฐ ์ด๋ฅผ ๋ฐ์ ์ฒ๋ฆฌ ํ ์๋ต -> ์๋ต์ด ์ง๋ ฌํ ๋์ด ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐํ :: ์ฌ์ฉ์๋ ์๊ฒฉ ์๋ฒ์ ์ง์ ์ํธ์์ฉํ์ง ์๊ณ ๋ก์ปฌ ํจ์ ํธ์ถ ๋ฐฉ์์ผ๋ก ์์ ์ ์ํํ ์ ์์
gRPC ํน์ง
- Google์์ ๊ฐ๋ฐํ ์คํ ์์ค RPC ํ๋ ์์ํฌ
- ํ๋กํ ์ฝ ๋ฒํผ๋ฅผ ์ฌ์ฉํ ๋ฐ์ดํฐ ์ง๋ ฌํ
- ๋ค์ํ ์ธ์ด ์ง์ ๋ฐ ์ธ์ด ๋
๋ฆฝ์ฑ
- ์๋ก ๋ค๋ฅธ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ์์๋ ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์
- HTTP/2 ๊ธฐ๋ฐ
- ์ฌ๋ฌ ๋ฉ์ธ์ง๋ฅผ ํ๋ฒ์ ๋์์ ๋ณด๋ผ ์๋ ์์
- ๋ฐ์ด๋๋ฆฌ ํํ์ ๋ฉ์ธ์ง๋ฅผ ๋น ๋ฅด๊ฒ ๋ณด๋ผ ์ ์์
- TLS๋ฅผ ์ฌ์ฉํ ๋ฐ์ดํฐ ์ํธํ
- Transport Layer Security
- ๋คํธ์ํฌ ์์ ๋ฐ์ดํฐ๋ฅผ ์ํธํ
- ๋ฐ์ดํฐ ์ ์ก ์ค ๋์ฒญ, ๋ณ์กฐ ๋ฑ์ ๊ณต๊ฒฉ์ผ๋ก ๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ์ฌ ์์ ํ ํต์ ์ ๋ณด์ฅํจ
- ์๋ฐฉํฅ ์คํธ๋ฆฌ๋ฐ
- ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ ํต์ ์ ๋์์ ์ฒ๋ฆฌํ ์ ์์
- ์ฑ๋์ ์ด์ด ํต์ ํ๋ฉฐ ์ด ์ฑ๋์ ์ฌ์ฌ์ฉํ ์ ์์
- MSA์ ์ฃผ๋ก ์ฌ์ฉ๋จ
gRPC ๋จ์
- HTTP/2 ๊ธฐ๋ฐ์ด๋ผ REST API์ ๋นํด ์ด๊ธฐ ํ์ต์ ๋ณต์ก์ฑ์ผ๋ก ์ธํด ํ์ตํ๊ธฐ ์ด๋ ค์ธ ์ ์์
- ํ๋กํ ์ฝ ๋ฒํผ๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ง๋ ฌํ ํ๊ธฐ ๋๋ฌธ์ ๋๋ฒ๊น ์ด ์ด๋ ค์ธ ์ ์์
- ์ง์ํ์ง ์๋ ๋ธ๋ผ์ฐ์ ๋ก ์ธํด ์น์์ ์ฌ์ฉํ๋ ค๋ฉด gRPC-Web์ ์ถ๊ฐ์ ์ผ๋ก ์ค์ ํด์ผํจ
ํ๋กํ ์ฝ ๋ฒํผ
- protocol buffers, protobuf
- ๊ตฌ๊ธ์์ ๊ฐ๋ฐํ ๋ฐ์ดํฐ ์ง๋ ฌํ ํฌ๋ฉง. gRPC์์ ์ด๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์์
- ๋ฉ์ธ์ง์ ํค๋ฅผ ๊ฐ์ํ, JSON๋ณด๋ค ์์ ๋ฉ์ธ์ง ์์ฑ
- ๋ฉ์ธ์ง๋ฅผ ๋ฐ์ด๋๋ฆฌ ํํ๋ก ์ง๋ ฌํ ํด์ ์ ๋ฌ (json์ ๋นํด ์ฉ๋์ด ์ ์)
- ๋น ๋ฅธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์์ ํฌ๊ธฐ์ ๋ฉ์ธ์ง ๋ณด์ฅ
- ํ๋กํ ์ฝ ๋ฒํผ๋ก ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ฉด ์๋์ผ๋ก ํด๋ผ์ด์ธํธ์ ์๋ฒ ์คํ
์ฝ๋๋ฅผ ์์ฑํจ
- .protoํ์ผ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์๋น์ค ์ธํฐํ์ด์ค ์ ์
service AccountService {
// ๊ณ์ข ๋ฑ๋ก
rpc registAccount (RegistAccountRequest) returns (RegistAccountResponse);
}
message RegistAccountRequest {
string balance = 1;
int64 userId = 2;
}
message RegistAccountResponse {
string accountNumber = 1;
int64 userId = 2;
}
ใด .proto ํ์ผ ์ ์ ์์
{
"balance" : 5000,
"userId" : 24
}
ใด json
- json์ด๋ผ๋ฉด balance, userId์ ๊ฐ์ ํค ๊ฐ์ด ํ์ํ์ง๋ง ํ๋กํ ์ฝ ๋ฒํผ๋ ์ด ํค๋ฅผ balance = 1 ๊ณผ ๊ฐ์ ํํ๋ก ์ ์ํ์ฌ ํค ์ ์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ค์ผ ์ ์์
stub
- ํด๋ผ์ด์ธํธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ ์ ์ฌ์ฉํด ๋ง์น ๋ก์ปฌ์ ๊ฐ์ฒด ์ฒ๋ผ ๋ค๋ฅธ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ ๋ฉ์๋๋ฅผ ์ง์ ํธ์ถํ ์ ์๊ฒ ํจ
- ์๋ฒ ์ธก์์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ๋์ผํ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ ์คํ ์ ๊ฐ์ง๊ณ ์์.
- ๋ค์ํ ์ธ์ด์์ ์ ์ฝ์์ด ์์ฒญ๊ณผ ์๋ต์ ๊ตฌํํ ์ ์์
์ฐธ๊ณ ๋ฐ ์ถ์ฒ ์ฌ์ดํธ
https://www.youtube.com/watch?v=uwrR5e5_FH8
https://blog.naver.com/jhc9639/222642712063
https://dealicious-inc.github.io/2022/07/11/applying-grpc.html
https://grpc.io/docs/what-is-grpc/introduction/
728x90
๋ฐ์ํ
'BE > ๐ Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Boot] ๊ฐ๋จํ gRPC ๊ตฌํํ๊ธฐ (0) | 2024.11.26 |
---|---|
[Spring Boot] AOP๋ฅผ ํ์ฉํ ์ปค์คํ ์ ๋ ธํ ์ด์ ๋ง๋ค๊ธฐ (0) | 2024.11.19 |
[Spring Boot] AOP ์ฌ์ฉ ๋ฐฉ๋ฒ๊ณผ ์์์ฝ๋ (0) | 2024.11.18 |
[Spring Boot] AOP ๊ฐ๋ ์ ๋ฆฌ (0) | 2024.11.17 |
[MQTT] Spring Boot ์์ MQTT(mosquitto) ์ฌ์ฉํ๊ธฐ (4) | 2024.11.13 |
๋๊ธ