[MSA] SpringBoot에서 gRPC요청에 Resilience4j 서킷 브레이커 적용하기
·
gRPC
시작하며안녕하세요 개발자 stark입니다. 이번 포스팅은 gRPC 시리즈의 번외 편입니다. 관련 프로젝트 링크는 하단에 있습니다. GitHub - wlsdks/grpc-client-example: SpringBoot3.x.x 이상 버전의 grpc 예제 프로젝트 (gRPC 서버 코드와 함께 확SpringBoot3.x.x 이상 버전의 grpc 예제 프로젝트 (gRPC 서버 코드와 함께 확인해주세요) - wlsdks/grpc-client-examplegithub.comgRPC 시리즈의 포스팅은 서버 구성으로부터 시작됩니다.아래 포스팅을 통해 gRPC로 MSA 프로젝트 구성하기를 따라가다 보면 위의 링크의 프로젝트가 완성됩니다. 시간이 괜찮으시다면 한 번쯤 읽어보시는 것도 좋을 것 같습니다. 이번 포스팅을 위해..
[SpringBoot3] MSA에 Resilience4j 서킷 브레이커 & Fallback 적용하기
·
MSA
시작하며안녕하세요. 개발자 stark입니다. 오늘은 서킷 브레이커를 적용해 봅시다. 마이크로서비스 아키텍처(MSA)에서는 외부 API 호출 시 장애에 대한 대응이 매우 중요합니다. Spring Boot 애플리케이션에서 Feign 클라이언트를 사용할 때 Resilience4j의 CircuitBreaker를 적용하여 원격 호출 실패 시 Fallback 로직을 실행하는 방법을 소개하고자 합니다.  최근에 제가 LinkedIn을 보다가 Resilience4J에 대한 글을 보고 크게 감명을 받았습니다. 저도 MSA 프로젝트를 하면서 서킷 브레이커는 반드시 적용시켜야 한다는 것은 알고 있었습니다. 그러나 이것을 어떻게 설명할지에 대해서 고민만 하고 있었는데 요즘 수많은 장애들을 겪으며 조금 더 회복 탄력성이 필요하..
[MSA] 스프링부트 gRPC vs FeignClient 성능 비교
·
gRPC
시작하며안녕하세요. 개발자 stark입니다. 드디어 gRPC 시리즈의 마지막 포스팅입니다! 이번 포스팅을 통해 gRPC와 FeignClient의 성능 차이를 알아보고 왜 gRPC를 사용하는 게 좋은지 그리고 어떻게 gRPC를 사용하기 위해 어떤 식으로 구성해야 하는지를 알게 될 것입니다. 제가 지금까지 열심히 MSA 프로젝트를 구성하고 gRPC서버, 클라이언트를 구성한 이유가 바로 성능 테스트를 위해서였습니다. 왜냐하면 MSA에서 어떤 통신 방식을 적용하는 것이 좋을지에 대해서 정말 많은 생각을 해왔기 때문입니다. 일반적으로는 Feign을 쓰는데 저는 아무리 봐도 gRPC가 더 좋을 것이라는 생각이 들었습니다. 왜냐하면 저는 MSA를 하면서 Feign도 써보고 너무 궁금해서 gRPC도 공부를 하며 써봤기..
[MSA] SpringBoot에서 gRPC 인터셉터로 서버간 jwt 인증 구현
·
gRPC
시작하며안녕하세요. 개발자 stark입니다!이번 포스팅에서는 gRPC를 사용한 MSA 프로젝트에 서버 간 인증 기능을 구현해 볼 것입니다. MSA 프로젝트에서는 각 서버 간의 통신이 매우 빈번하게 발생합니다. 그래서 통신에 대한 적절한 보안을 적용시켜줘야 합니다. 근데 가끔 이런 생각이 들기도 합니다. 어차피 aws 같은 클라우드 내부의 private 네트워크에서만 호출하도록 설계할 것 아닌가?  맞습니다! 그래도 보안은 설정해 주시는 게 좋습니다. 왜냐하면 서버 간 통신에서 private 네트워크라고 해서 자동으로 외부 위협이 없다고 가정하기에는 무리가 있기 때문입니다. 내부 통신에서도 악의적인 접근이나 데이터 유출, 인가 문제 등 보안 위협이 존재할 수 있습니다. 또한, MSA 구조에서는 서비스가 분..
[MSA] SpringBoot에 gRPC 클라이언트 구성하기
·
gRPC
시작하며안녕하세요. 개발자 stark입니다. 이전 포스팅에서는 gRPC 서버를 구성해 봤습니다. 이번에는 gRPC 클라이언트 서버를 구성해 봅시다.지금 구성중인 프로젝트는 MSA이기 때문에 최소 2개의 서버가 필요합니다. 그래서 저는 어떤 도메인을 예시로 들지 고민하다 가장 예시로 설명하기 쉬운 회원 도메인을 적용해서 메인 서버를 구성했고 내부에 gRPC 서버를 구성하였습니다. 아래 다이어그램을 보시면 gRPC 서버는 SpringBoot 내부에 들어가 있는 것을 확인하실 수 있습니다. 그 이유는 gRPC는 SpringBoot에서 일반적으로 사용하는 tomcat과 별개로 netty 서버를 띄워줘야 하기 때문입니다. 반면 클라이언트 서버들은 netty 서버 구성을 하지 않고 SpringBoot의 기본 tom..
[MSA] SpringBoot에 gRPC 서버 구성하기: 회원 서비스 만들기
·
gRPC
시작하며안녕하세요. 개발자 stark입니다.최근 업무가 조금 바빠져서 블로그에 글을 작성하지 못했는데요. 설이기도 하고 정리할 시간이 생겨서 오랜만에 글을 적게 되었습니다. 제가 이번 연도에 작성할 주요 시리즈 중 하나는 gRPC였는데요. 왜냐하면 원할 때 언제든지 적용해서 사용하기에는 생각보다 관련된 정보가 부족하다고 느꼈기 때문입니다. (제 정보력이 부족한 걸 수도 있지만요 ㅎㅎ) 그래서 저는 Spring에 gRPC를 적용하고 MSA 서버 간 통신이 가능하도록 프로젝트를 구성했고 이것을 천천히 공유드리고자 합니다. 총 2개의 SpringBoot 프로젝트를 만들어야 하고 각 프로젝트에 gRPC 서버, gRPC 클라이언트를 구성해야 합니다. 조금 특이하다고 느낄만한 것이 있는데 일반적으로 MSA를 구축할..
스프링 시큐리티에서 SecurityContext를 비동기 스레드에 전파하는 방법
·
Spring/Spring Security
시작하며안녕하세요. 개발자 Stark입니다.오늘은 스프링 시큐리티를 사용할 때 http 메인 호출 내부에서 비동기 메서드를 호출했을 때(한 호출에서 부모-자식 스레드가 함께 동작하는 경우)에 스프링 시큐리티에서는 SecurityContextHolder(ThreadLocal)의 데이터를 어떻게 처리하는지와 이 데이터를 비동기 스레드에 전달 가능한지에 대해 함께 알아봅시다. 저의 경우 업무를 하다 보니 일반 스레드풀을 사용하는 메서드 내부에서 비동기 메서드를 호출하게 되는 경우가 있었는데 이때 유저의 정보가 그대로 전달되어야만 했습니다. 근데 비동기 스레드의 기본 설정 스레드풀인 SimpleTaskExecutor와 일반 스레드에서 사용하는  ThreadPool은 각각 다른 스레드풀이기에 ThreadLocal..
gRPC 인터셉터를 사용한 JWT 인증과 Spring Security 연동하기
·
gRPC
시작하며안녕하세요. 개발자 Stark입니다. 오늘 포스팅은 제가 야심 차게 준비 중인 2개의 시리즈(트랜잭션, gRPC) 중 gRPC시리즈입니다. 내용을 간단히 설명드리자면 스프링에서 gRPC를 사용하면서 JWT 토큰 인증 기능을 구현하기 위해 토큰 인증을 담당하는 grpc 인터셉터를 구현하고 spring security의 SecurityContextHolder와 통합시켰습니다. 서버에 gRPC 요청이 들어오면 요청을 처리하기 전에 gRPC 인터셉터가 호출되면서 (GrpcAuthenticationReader)를 호출하게 됩니다. 저는 이 Reader 클래스를 Jwt 전용으로 커스텀해서 빈으로 등록하여 매번 요청을 받을 때마다 제가 만든 빈 클래스가 호출되도록 해서 JWT 인증을 진행하고 있습니다. 근데 ..
스프링부트에서 프로퍼티 파일들은 어떻게 로드되는가?
·
Spring/Spring 설정
안녕하세요. stark입니다!스프링부트는 애플리케이션의 설정을 관리하기 위해 프로퍼티 파일(properties 파일) 또는 YAML 파일을 주로 사용합니다. 이러한 설정 파일들은 애플리케이션이 실행될 때 특정 규칙과 우선순위에 따라 로드되며, 다양한 환경에서 유연하게 동작할 수 있도록 설계되어 있습니다. 이번 글에서는 프로퍼티 파일이 어떤 규칙으로 로드되는지, 이를 어떻게 활용할 수 있는지를 상세히 알아봅시다.  1. 기본적인 프로퍼티 파일 로드 규칙스프링부트 애플리케이션은 실행 시, 특정 경로에서 설정 파일을 자동으로 탐지합니다. 가장 기본적으로 사용되는 파일은 application.properties 또는 application.yml이며, 다음과 같은 경로에서 찾습니다.1. classpath 경로일반..