일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 핀포인트
- OIDC
- RedirectService
- Loki 로그
- 개발 어렵당.ㅠ
- pinpoint
- nGinder
- UnsupportedOperationException
- jar 배포
- hbase 저장공간 설정
- 스프링Boot 개발환경
- pinpoint 2.5.3
- 플루터
- jsonMarshaller
- 논블록킹 성능
- 더티체킹
- 애자일 싫타
- Ingress Controller Fake
- formik
- Armeria
- reids
- R2DBC Paging
- nodeSelector
- LPOS
- intellij
- save/update
- fake jwt
- 월급루팡 일지
- 노드간 통신
- ㅉ때
- Today
- Total
대머리개발자
아르메리아를 쓰자. 본문
아르메리아의 호의가 권리인 줄 알았다. 스미마센!
뭐 굳이 grpc를 사용하지 않는 환경에서 써야하는가?에 대한 물음으로 엄청 회의적으로 작성했다.
나의 무지를 반성합니다. 써야합니다.
아르메리아를 Webflux로 변경하고자 봤는데 쉽게 작성했던 코드들이 쉽게 마이그레이션이 안 되는 부분들이 있다.
아마도 반대로는 webflux -> 아르메리아는 엄청 easy 할 듯.
일일히 나열할 수는 없지만 찐으로 개발자가
코어 기능에만 집중할 수 있도록!
쉽게 작성할 수 있도록.
무한한 도움을 준다.
그래 왜 아르메리아를 제쳐두려고 했니.. X잡고 반성한다.
인증서버를 gRpc 서버로 만들었지만, 어느 누구도 gRpc로 통신하는 곳이 없다.
해서 모듈로 만들어 보려고 한다.
사용자 정보를 얻기 위해서 OkHttpClient로 호출해서 쓰고 있지만 GrpcClient를 만들어 보고자 하는 부분이다.
fun getUserInfo(): Map<*,*> {
val mutableMap = mutableMapOf(
"executeEvent" to "GET"
)
val request = requestPost("http://oauth-service/user", mutableMap)
val response = OkHttpClient().newCall(request).execute()
if (response.isSuccessful) {
val body = response.body?.string()
val json = Gson().fromJson<Map<String, Any?>>(body, object : TypeToken<Map<String, Any?>>() {}.type)
return (json["data"] as Map<*, *>)
}
return mapOf("data" to "userInfo is null")
}
중요한 것은 아르메리아에서 이미 만들어져 있다.ㅋ
사용을 위한 모듈 프로젝트 환경에서 일일이 설정하기 보단 jar 파일로 퉁 던져 주려고 한다.
일단 gRpc 클라이언트 리소스이다. "GrpcClients" 해당 녀석을 이용하면 된다.
class GrpcUser {
fun getUserInfo(url:String, token:String): UserGrpc.User{
val client = GrpcClients
.newClient( url, UserServiceGrpc.UserServiceBlockingStub::class.java)
.withCallCredentials(BearerTokenCredential(token))
return client.unary(UserGrpc.User.newBuilder()
.setExecuteEvent(CommonGrpc.ExecuteEventType.GET).build()).data
}
}
단순 테스트 코드이다.
Jar 파일로 빌드해보자!
개발환경에서 너무나도 매끄럽게 OK
Jar 파일로 만들어서 모듈로 했더니.... 쉬운 길이 없구나..
정상적으로 Jar 파일이 만들진 것이 아니라고 판단해서 찾아봤더니 shadowJar 플러그인이 있었다.
id "com.github.johnrengelman.shadow" version "8.0.0"
shadowJar {
mergeServiceFiles()
}
단 하나의 단점이라면 추가된 Jar파일이 좀 무겁다. -->.. 고민좀.
//user = HttpRequest.getUserInfo(jwtToken, user.loginId)
user = GrpcUser().getUserInfo(jwtToken)
아르메리아grpc 클라이언트 말고.. 순수하게 POJO(?)
class GrpcUser(private val url:String){
fun getUserInfo(token:String): UserGrpc.User{
val managedChannel = ManagedChannelBuilder.forAddress(url, 80)
//.keepAliveTime(5, TimeUnit.MINUTES)
//.keepAliveTimeout(30, TimeUnit.SECONDS)
.maxInboundMessageSize(33554432)
.usePlaintext()
.build();
try{
val user =
UserGrpc.User.newBuilder()
.setExecuteEvent(CommonGrpc.ExecuteEventType.GET)
.build()
return UserServiceGrpc.newBlockingStub(managedChannel)
.withCallCredentials(BearerTokenCredential(token))
.unary(user).data
}finally {
managedChannel.shutdown()
}
}
}
디펜더시 덜 걸려 Jar파일 50%를 절약할 수 있다. ㅎ 40MB -> 19MB
grpc 클라이언트는 순수하게 쓰자!ㅎ
..K8S 내부 호출은 gRpc 가즈아!!
'개발이야기 > 코틀린' 카테고리의 다른 글
멤버 변수 바인딩에 대한 고민 (2) | 2024.03.29 |
---|---|
코루틴 조으다! (1) | 2024.03.19 |
ModelMapper - LocalDateTime처리 (1) | 2024.01.29 |
아르메리아(Armeria) - ExceptionHandler (1) | 2024.01.03 |
아르메리아 오류인듯...아닌듯. (1) | 2023.12.18 |