Tech/SpringBoot
-
마이크로서비스 추적을 위한 Spring Cloud Sleuth와 Zipkin 사용예제Tech/SpringBoot 2023. 10. 22. 22:04
Spring Cloud Sleuth는 Spring Cloud 프레임워크의 일부로, 마이크로서비스 아키텍처에서 서비스 간의 요청 추적을 돕는 라이브러리입니다. 이를 통해 개발자는 마이크로서비스 간의 요청이 어떻게 흘러가는지, 각 서비스에서 소요되는 시간 등을 쉽게 확인하고 문제를 진단할 수 있습니다. Spring Cloud Sleuth는 주로 다음과 같은 방법으로 작동합니다: 각 마이크로서비스의 요청과 응답에 유니크한 ID를 부여하여 추적합니다. 서비스 호출 체인을 통해 각 서비스의 응답 시간과 상태를 로깅합니다. 이 정보를 이용하여 시각화 도구 (예: Zipkin)에 데이터를 전송하여, 서비스 간의 호출 관계와 응답 시간을 시각적으로 확인할 수 있게 해줍니다. Spring Cloud Sleuth Spri..
-
스프링 클라우드 스트림과 카프카를 활용한 마이크로서비스 이벤트 처리Tech/SpringBoot 2023. 10. 22. 21:34
마이크로서비스 아키텍처에서 이벤트 기반 통신은 서비스 간의 느슨한 결합을 지원하며, 확장성과 유연성을 향상시킵니다. 이 포스팅에서는 스프링 클라우드 스트림(Spring Cloud Stream)과 Apache Kafka를 사용하여 마이크로서비스 간의 이벤트 기반 통신을 구현하는 방법을 소개합니다. 스프링 클라우드 스트림이란? 스프링 클라우드 스트림은 메시지 기반 마이크로서비스를 구축하기 위한 프레임워크입니다. 개발자가 특정 메시지 브로커의 API에 직접 의존하지 않고, 메시지 기반의 커뮤니케이션을 손쉽게 구현할 수 있게 해줍니다. 스프링 클라우드 스트림은 메시지 브로커를 추상화하는 바인더(binder)라는 개념을 도입하여, Kafka, RabbitMQ와 같은 다양한 메시지 브로커를 동일한 프로그래밍 모델로..
-
몽고디비를 활용한 주문 프로세스 관리: 스텝별 상태 저장 및 조회Tech/SpringBoot 2023. 10. 22. 20:44
모든 쇼핑몰에서 사용자 주문, 결제, 배송 과정은 거의 모두 동일 합니다. 이러한 트랜잭션의 각 단계를 효과적으로 관리하고 추적하는 것은 사용자 경험을 향상시키고 운영 효율성을 높이는데 도움을 줍니다. 이번 포스팅에서는 몽고디비를 활용하여 주문 아이디 기준으로 스텝별 상태를 저장하고 조회하는 방법을 소개합니다. 시퀀스 도커 컴포즈 설정 몽고디비 도커 컴포즈를 통해 구성합니다. version: '3.8' services: # MongoDB configuration mongodb: image: mongo:latest container_name: mongodb_container ports: - "27017:27017" volumes: - mongodb_data:/data/db environment: MONGO..
-
스프링의 RedisLockRegistry를 활용한 제한된 상품의 동시성 제어 및 주문 처리Tech/SpringBoot 2023. 10. 9. 15:15
개요 이 포스팅에서는 스프링의 RedisLockRegistry를 활용하여 제한된 상품의 주문 처리에 대한 동시성 제어를 다루어 보겠습니다. 사용자가 동일한 제한된 상품을 구매할 때, 여러 주문 서비스 인스턴스에서 동시성 제어를 해야 할 필요가 있습니다. 이 때 RedisLockRegistry가 큰 역할을 합니다. 설정 의존성 추가 id 'org.springframework.boot' version '3.1.4' id 'io.spring.dependency-management' version '1.1.3' 먼저, 필요한 의존성을 추가합니다. implementation 'org.springframework.integration:spring-integration-redis' RedisLockRegistry 설..
-
스프링 부트에서 외부 API 서비스를 병렬 처리하여 응답하는 방법Tech/SpringBoot 2023. 10. 9. 14:01
많은 서비스에서 다양한 자산 정보를 사용자에게 제공해야 하는 경우가 있습니다. 예를 들어, 사용자가 보유한 적립금, 쿠폰 개수, 코인 수량 등의 정보를 한번의 요청으로 빠르게 얻고 싶어합니다. 스프링 부트와 자바를 활용하여 이런 자산 정보들을 병렬로 처리하고, 그 결과를 사용자에게 효과적으로 제공하는 방법에 대해 살펴보겠습니다. 스프링 부트에서는 @Async 어노테이션과 CompletableFuture를 활용하여 쉽게 비동기 호출을 구현할 수 있습니다. 이를 통해 여러 API 호출을 동시에 수행하고, 모든 결과를 기다린 뒤 하나로 합치는 병렬 처리를 구현할 수 있습니다. 본 글에서는 적립금, 쿠폰 개수, 코인 수량과 같은 사용자의 다양한 자산 정보를 병렬로 조회 및 처리하여 응답하는 API 서비스 구현에..
-
자바의 Supplier와 Consumer 인터페이스 이해와 활용Tech/SpringBoot 2023. 10. 9. 13:49
자바의 Supplier와 Consumer 인터페이스는 자바 8에서 소개된 함수형 인터페이스로, 각각 데이터를 제공하는 로직과 데이터를 소비하는 로직을 간단하게 표현하는데 사용됩니다. Supplier 인터페이스 Supplier 인터페이스는 파라미터를 받지 않고 값을 리턴하는 get() 메소드를 가지고 있습니다. @FunctionalInterface public interface Supplier { T get(); } Consumer 인터페이스 반면 Consumer 인터페이스는 파라미터를 하나 받아서 소비하고 (처리하고) 리턴 값이 없는 accept() 메소드를 가지고 있습니다 @FunctionalInterface public interface Consumer { void accept(T t); } 예제: ..
-
Spring Boot Config ServerTech/SpringBoot 2023. 9. 29. 14:58
1. Spring Boot Config Server 설정 build.gradle.kts plugins { kotlin("jvm") version "1.6.0" id("org.springframework.boot") version "2.6.2" id("io.spring.dependency-management") version "1.0.11.RELEASE" } group = "com.example" version = "0.0.1-SNAPSHOT" java.sourceCompatibility = JavaVersion.VERSION_11 repositories { mavenCentral() } dependencies { implementation("org.springframework.boot:spring-boo..
-
Spring boot Private field and method TestTech/SpringBoot 2022. 5. 22. 12:45
ReflectionTestUtils를 이용하여 private field or method 를 테스트 할 수 있다. public class Student { private int id; private String getFirstNameAndId(){ return getFirstName() + " " + getId(); } } @SpringBootTest class StudentTest { @Autowired Student student; @BeforeEach void studentBeforeEach(){ student.setFirstName("Eric"); student.setLastName("Roby"); student.setEmailAddress("asdfa@asdf.com"); student.setS..
-
Spring boot Throwing Exception testTech/SpringBoot 2022. 5. 22. 12:05
@SpringBootTest class StudentRepositoryTest { @Autowired Student student; @Autowired StudentGrades studentGrades; @MockBean private StudentRepository studentRepository; @Autowired private StudentService studentService; @Autowired private ApplicationContext context; @DisplayName("Throw runtime error") @Test void throwRuntimeError() { Student nullStudent = (Student)context.getBean("Student"); doTh..
-
Spring boot @MockBeanTech/SpringBoot 2022. 5. 22. 11:49
@MockBean - includes Mockito @Mock functionality - also adds mock bean to if existing bean is there, the mock bean will replace it - thus making the mock bean available for injection with @Autowired Using @Mock @SpringBootTest class StudentRepositoryTest { @Mock private StudentRepository studentRepository; @InjectMocks private StudentService studentService; } Using @MockBean @SpringBootTest clas..