단일 책임 원칙(SRP) - 한 클래스는 오직 하나의 액터만을 위한 책임을 가져야 한다.
·
Spring/Spring 기초 지식
안녕하세요! 개발자 stark입니다. 이번 포스팅은 SOLID 원칙 중 첫 번째인 단일 책임 원칙(Single Responsibility Principle, SRP)에 대한 내용입니다. 굉장히 흔한 지식이지만 로버트 마틴이 작성한 SRP 관련 글을 읽던 중 "각 소프트웨어 모듈은 변경의 이유가 하나여야 한다."라는 다소 추상적인 개념을 보게 되었고 제가 이걸 조금이라도 더 쉽게 이해하고 싶다는 생각이 들어 정리하며 작성하게 되었습니다. 참고로 SRP를 '클래스가 한 가지의 일만 해야 한다.'라고 착각하는 경우가 많습니다. 저도 이런 생각을 했던 적이 있었는데 실무에서 코드를 작성하다 보면 잘못된 이해 때문에 오히려 코드를 복잡하게 작성하고 있었다는 것을 알게 되었습니다. 잘못된 이해를 가지고 코드를 작성..
[DDD] 애그리게잇(Aggregate) 구성하기
·
DDD
시작하며안녕하세요, 개발자 stark입니다! 오랜만에 글을 적게 되었는데요. 오늘은 제가 실무에서 가장 많이 고민했던 주제 중 하나인 DDD(Domain-Driven Design)의 애그리게잇 설계에 대해 다뤄보려고 합니다. 특히 Spring과 Java 환경에서 이를 어떻게 효과적으로 구현할 수 있는지, 실제 경험을 바탕으로 공유해 드리겠습니다. 애그리게잇은 DDD에서 가장 핵심적인 개념임에도 불구하고 이를 적절히 설계하는 데 어려움을 겪습니다. 저 같은 경우에는 매번 로직을  작성하면서 "이 엔티티는 어느 애그리게잇에 속해야 할까?", "애그리게잇 경계를 어디까지 설정해야 할까?" 등의 고민이 끊이지 않았습니다. 그래서 오늘은 최대한 실용적인 관점에서 접근해 보겠습니다.  도메인 주도 설계와 애그리게잇..
[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 프로젝트 구성하기를 따라가다 보면 위의 링크의 프로젝트가 완성됩니다. 시간이 괜찮으시다면 한 번쯤 읽어보시는 것도 좋을 것 같습니다. 이번 포스팅을 위해..
[Spring] MSA 서킷 브레이커 적용기
·
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를 구축할..