Backend

0. 서론지난 1편에서는 Elasticsearch와 Kibana를 Docker 환경에서 설치하고 기본적인 설정을 진행해봤습니다. 이번 2편에서는 본격적으로 Spring Boot와 Elasticsearch를 활용한 검색 서비스를 구현해보려고 합니다. 이를 위해 Spring Data Elasticsearch를 활용해 티켓 정보를 저장하고 검색하는 기능을 구현해보겠습니다. 1. 개발환경프로젝트에서 사용된 환경은 아래와 같습니다.JAVA 17SpringBoot 3.2Elasticsearch 8.6.0 2. Elasticsearch 활용한 검색서비스 만들기Spring data Elasticsearch 의존성 추가하기Spring Data Elasticsearch는 Spring과 Elasticsearch를 쉽게 연동..
0. 서론티켓 예매 서비스를 개발하면서 기존에는 LIKE 연산을 이용한 검색을 사용하고 있었습니다.하지만 데이터가 많아질수록 LIKE 검색의 성능의 저하 문제가 발생할 뿐만 아니라, 검색어 자동완성, 실시간 인기 검색어 등의 고급 기능을 구현하기 위해서는 기존의 방식에는 한계가 많이 있었습니다. 이 문제를 해결하기 위해 Elasticsearch를 도입하게 되었습니다. 앞으로 두 편의 글을 통해 거쳐 Elasticsearch가 무엇인지 알아보고, Elasticsearch를 활용한 검색어 자동완성, 실시간 인기검색어 등의 기능을 구현하는 과정을 공유하려고 합니다. 1편에서는 Elasticsearch가 무엇인지 알아보고 설치까지 진행해보도록 하겠습니다!!  1. Elasticsearch란?엘라스틱서치(Elas..
·Backend/MSA 전환
1. 개요이전 글에서 결제가 성공적으로 이루어지면 Kafka 이벤트를 발행하여 예매 상태를 변경하는 방식을 적용했습니다.하지만 여기서 치명적인 문제가 발생할 수 있습니다. 현재 MSA 환경에서는 각 서비스가 독립적인 데이터베이스를 가지고 있으며, 트랜잭션이 완료되기 전에 이벤트 메시지를 발행하게 됩니다.애초에 결제가 실패할 경우에는 문제가 되지 않으나 네트워크 장애나 Kafka의 장애, 혹은 DB에 특정한 이유로 인해 예외가 발생한다면 다음과 같은 문제가 생기게 됩니다.  📌 1. Kafka 메시지 유실 문제네트워크 장애나 Kafka 장애로 인해 메시지가 정상적으로 발행되지 않는다면?예매 서비스는 결제가 완료된 사실을 알지 못하고, 사용자의 예매 상태는 변경되지 않은 채로 남아버립니다.이는 고객이 결제..
·Backend/MSA 전환
1. 개요프로젝트를 진행하면서 예매 서비스와 결제 서비스가 각각 독립적인 마이크로서비스로 운영되는 환경을 구축했습니다.그런데 문제는 결제가 완료되면 예매 서비스의 상태를 변경해야 한다는 점이었습니다. 두 서비스가 독립적인 애플리케이션으로 구성되어있기 때문에 단순한 API 호출 방식으로 해결하려 하면 서버 간 강한 의존성이 생기고 확장성이 저하되는 문제가 발생할 수 있었습니다. 이 문제를 해결하기 위해 Kafka를 활용한 이벤트 기반 아키텍처를 도입했습니다.결제 서비스에서 '결제 완료' 이벤트를 Kafka에 발행(Publish) 하면, 예매 서비스가 해당 이벤트를 구독(Subscribe)하여 상태를 변경하는 방식입니다. 이를 통해 서비스 간 결합도를 낮추면서도 비동기적으로 데이터를 안정적으로 전달할 수 있..
·Backend/MSA 전환
1. 서킷 브레이커(Circuit Breaker)란? 서킷 브레이커(Circuit Breaker) 패턴은 MSA 환경이나 분산 시스템에서 장애를 격리하고 시스템의 신뢰성을 높이기 위해 사용되는 디자인 패턴입니다. 전기 회로 차단기와 유사한 개념으로, 특정 조건에서 서비스의 호출을 차단해 장애 전파를 방지하는 역할을 합니다. 그렇다면 이 서킷 브레이커가 필요한 이유에 대해 자세히 알아보도록 하겠습니다.   1-1 서킷 브레이커(Circuit Breaker)가 필요한 이유마이크로서비스 환경에서는 각 서비스가 네트워크를 통해 통신하게 됩니다. 하지만 네트워크 장애 의존 서비스의 다운타임, 과부화 등의 이유로 일부 서비스가 정상적으로 응답하지 않을 수 있습니다. 또한 문제가 발생한 서비스에 계속 요청을 보낸다면..
·Backend/MSA 전환
1. 서비스 분리에서 나타난 문제점기존 모놀리식 구조에서 MSA전환을 진행하면서 애플리케이션을 각 서비스별로 분리하다 엄청난 고뇌에 빠지게 되었습니다...예매 서비스와 티켓 서비스를 분리한 구조에서, 예매 내역을 조회할 때 데이터를 어떻게 처리할까에 대한 고민이었습니다. 상황 설명1. 티켓 서비스공연, 스케줄, 좌석 정보를 관리주요 기능: 티켓 생성, 스케줄 관리, 좌석 관리 2. 예매 서비스예매 및 예매 내역 관리주요 기능 : 예매 생성, 예매 취소, 예매 내역 조회예매 내역을 조회하면 공연 이름, 스케쥴(회차), 좌석 정보 등이 필요하게 됩니다. 하지만 이 데이터는 티켓 서비스에서 관리하고 있는 상황입니다. 고뇌 끝에 이 문제를 해결할 두 가지 방법을 생각해보았습니다.  1. 예매 서비스의 DB에 관..
·Backend/MSA 전환
1. Spring Cloud Config란?Spring Cloud Config는 분산 시스템에서 외부화된 설정 정보를 중앙 집중화하여 관리하기 위해 사용합니다.Config 서버는 설정 정보를 중앙 저장소에서 읽어와 클라이언트 애플리케이션에 제공하고, 클라이언트는 Config Server로부터 설정을 가져와 동적으로 업데이트가 가능합니다.  1-1 Spring Cloud Config의 장점과 단점Spring Cloud Config의 장점과 단점에 대해 알아보도록 하겠습니다. 1. 중앙 집중화된 설정 관리여러 마이크로서비스에서 동일 설정이 필요하거나, 분산되어 있는 경우 Config Server를 통해 한 곳에서 관리가 가능하다.2. 환경별 설정 관리개발, 테스트, 운영 등 환경에 따라 다른 설정을 효율적으..
·Backend/MSA 전환
1. API Gateway란?Spring Cloud Gateway를 적용하기에 앞서 API Gateway가 무엇인지 알아보겠습니다.기존 모놀리식 구조에서는 하나의 애플리케이션 안에서 요청을 처리하면 되었지만 MSA 구조에서는 각 서비스로 애플리케이션이 분리되기 때문에 클라이언트와 서비스 간 통신이 복잡해지는 문제가 발생하게 됩니다. 이를 해결하기 위해 사용하는 것이 API Gateway입니다. API Gateway는 클라이언트와 마이크로서비스 간의 중간 관리자 역할을 수행하는 구성 요소입니다.클라이언트의 요청은 API Gateway를 통과하며 Gateway는 요청을 적절한 서비스로 전달하고 응답을 클라이언트에 반환하는 역할을 합니다. API Gateway의 주요역할을 정리해보면 아래와 같습니다. 1. 중..
·Backend/MSA 전환
1. Service Discovery 1-1 Service Discovery 등장 배경마이크로서비스 아키텍처에서는 서비스가 개별적으로 배포되고 실행되는데, 이 과정에서 다음과 같은 문제가 발생하게 됩니다.컨테이너나 서버가 동적으로 시작되고 종료되면 IP주소나 포트가 변경될 수 있다.동일한 서비스를 여러 인스턴스로 확장하면 각 인스턴스를 어떻게 연결할지 관리가 필요하다.클라우드 기반 환경에서 서비스가 자동으로 추가되거나 제거되는 일이 빈번히 발생한다.위와 같이 IP, Port의 변경이 잦거나 서비스가 확장될 때마다 API Gateway나 Load Balancer의 설정 정보를 수동으로 업데이트하는 것은 상당한 불편함을 야기합니다. 이런 불편함을 해결하기 위해 Service Discovery 패턴이 등장하게..
·Backend/MSA 전환
1. 멀티 모듈이란?멀티모듈이란 하나의 프로젝트를 여러 개의 독립적인 모듈로 나누어 개발하는 방식입니다.기존 단일 모듈 구조에서는 모든 소스코드와 리소스가 하나의 프로젝트 안에서 포함되어 관리되었지만 멀티모듈에서는 필요한 기능이나 역할 별로 모듈을 분리하고 각각 독립적으로 관리할 수 있습니다.   1-1 멀티모듈의 장점단일 모듈 멀티 프로젝트가 존재한다고 생각해봅시다. 각각 나뉘어진 A,B,C 프로젝트는 동일하게 다뤄지는 Member라는 도메인을 사용중입니다. 이 때 Member 도메인의 변경 요청사항이 있어 변경이 생긴다면, 서로 다른 3개의 프로젝트를 하나하나 오픈해 복사 붙여넣기 하거나, 직접적으로 수정해야하는 불편함이 발생하게 됩니다.  멀티 모듈의 단일프로젝트로 구성되어 있을 경우는 어떨까요? ..
여포개발자
'Backend' 카테고리의 글 목록