서킷브레이커는 또 무엇일까...
개발/Spring2024. 11. 28. 16:24서킷브레이커는 또 무엇일까...

개요도대체 서킷 브레이커가 무엇이고 이걸 왜 쓰는 걸까요...? 마이크로서비스 아키텍처에서 서비스 간의 장애 전파를 막기 위한 패턴이라고 하는데...오늘은 같이 공부하며 서킷 브레이커를 왜 사용해야 하는지에 대한 이해와 간단하게 적용을 한 번 해보고자 합니다.  1. 서킷 브레이커의 탄생 배경서킷 브레이커는 전기 회로에서 과부하를 방지하기 위한 장치에서 이름을 따왔습니다.   마이크로서비스 아키텍처가 대두되면서 서비스들이 분산되고, 서로 다른 네트워크 환경에서 통신하게 되었습니다.하지만 네트워크 지연이나 장애로 인해 하나의 서비스 장애가 다른 서비스로 전파되어 전체 시스템의 안정성을 해치는문제가 발생했습니다.이러한 문제를 해결하기 위해 마틴 파울러는 서킷 브레이커 패턴을 제안했습니다. 이는 서비스 간의 ..

Spring과 Kafka를 활용한 트랜잭셔널 아웃박스 패턴 구현
개발/Spring2024. 11. 21. 22:50Spring과 Kafka를 활용한 트랜잭셔널 아웃박스 패턴 구현

트랜잭셔널 아웃박스 패턴이란?마이크로서비스 환경에서는 데이터베이스와 메시지 브로커를 함께 사용하는 경우가 많습니다. 예를 들어 콘서트 예매 시스템에서 결제가완료되면 사용자에게 알림을 보내야 하는데, 이 과정에서 데이터베이스 트랜잭션과 메시지 발행이 원자성을 가져야 합니다.트랜잭셔널 아웃박스 패턴은 이벤트를 바로 메시지 브로커로 보내지 않고, 먼저 데이터베이스의 아웃박스 테이블에 저장한 후 별도의프로세스가 이를 읽어서 메시지 브로커로 전송하는 방식입니다. 1. 기존 구현의 문제점기존 시스템은 결제 처리와 동시에 카프카로 메시지를 직접 전송했습니다@Transactionalpublic PaymentResult processPayment(PaymentCommand command) { Payment paym..

MSA 아키텍처로의 전환을 고려한 트랜잭션 처리 및 이벤트 기반 설계
개발/Spring2024. 11. 15. 01:38MSA 아키텍처로의 전환을 고려한 트랜잭션 처리 및 이벤트 기반 설계

1. 기존 시스템의 문제점 분석1.1 강결합된 도메인 구조@Transactionalpublic PaymentConcertResult paymentConcert(String token, long reservationId) { long userId = Users.extractUserIdFromJwt(token); Users user = userRepository.findById(userId); Queue queue = queueRepository.findByToken(token); queue.tokenReserveCheck(); Reservation reservation = reservationRepository.findById(reservationId); user.check..

Junit & Mock 기반 테스트 코드 도입기
개발/Spring2024. 9. 23. 19:49Junit & Mock 기반 테스트 코드 도입기

개요우리는 왜 테스트 코드를 도입해야 할까요? 테스트 코드를 도입하는 이유 는 여러가지가 있지만,주된 이유는 코드의 품질을 높이고 유지보수성을 향상 시키기 위해서입니다. 개발을 하다 보면 API를 개발하고 나서 Postman과 같은 도구를 사용해 수동으로 테스트할 수 있습니다. 그렇다면 많은 개발자들이 시간을 들여 테스트 코드를 작성하는 이유는 무엇일까요? 물론, API 개발만 놓고 본다면 개발하고 나서 직접 테스트하는 게 더 빠를 수도 있습니다. 하지만 장기적인 관점에서 보면테스트 코드를 작성하는 것이 훨씬 더 효율적이고 안전한 방법입니다. 이를 구체적으로 설명드리겠습니다.  테스트 코드를 작성해야 하는 이유 1. 자동화 된 테스트로 시간 절약 가능Postman을 통해 수동으로 API를 테스트할 경우,..

Spring 애플리케이션에서 로깅 구현하기 (feat. SLF4J)
개발/Spring2024. 7. 12. 16:45Spring 애플리케이션에서 로깅 구현하기 (feat. SLF4J)

이전글 : https://frogcodepond.tistory.com/3 Java 애플리케이션에서 로깅 구현하기 (feat. SLF4J)이번 포스팅에서는 java 어플리케이션에서 로깅을 구현하는 방법을 소개하겠습니다. 1. SLF4J와 Log4j의 차이SLF4J (Simple Logging Facade for Java)SLF4J는 Java에서 사용하는 로깅 프레임워크의 인터페이스 역frogcodepond.tistory.com(먼저 읽고 오시면 더 좋읍니다..) 자, 저번 Java에서 로깅하기에 이어 말씀드린대로사용자가 api를 통해 보낸 req body와 내가 내보낸 res body를 로깅하는 법을 설명하겠습니다.Spring으로 넘어옵시다!  1. Gradle 설정먼저, Spring Boot 프로젝트의 ..

스프링 간단한 커스텀 인증 필터 구현하기
개발/Spring2024. 6. 26. 21:49스프링 간단한 커스텀 인증 필터 구현하기

이번 포스팅에서는 스프링 부트 애플리케이션에서 커스텀 인증 필터를 구현하는 방법을 소개하겠습니다.특히, 인증 로직을 데이터베이스와 연동하여 처리하는 방법에 대해 다룹니다. 목차시작하며프로젝트 셋업커스텀 인증 필터 구현암호화 로직 구현필터 등록 및 설정마치며  1. 시작하며API 서버를 운영하면서 특정 요청에 대해 인증을 처리해야 할 때가 많습니다.이번 포스팅에서는 간단하게 커스텀 인증 필터를 통해 요청을 검증하고, 데이터베이스에 저장된 정보를 바탕으로인증을 처리하는 방법을 알아보겠습니다. 2. 프로젝트 셋업먼저, 프로젝트의 build.gradle 파일에 필요한 의존성을 추가합니다.스프링 부트, Lombok, MySQL 드라이버 등이 필요합니다. plugins { id 'java' id 'org..

image