[MSA] 데이터 정합성과 멱등성
·
카테고리 없음
발생한 문제 : 데이터의 정합성과 모놀리식 구조에서 파생된 타서비스와 강한 결합기존 시스템에서는 비즈니스 로직 수행 시 객체 간 높은 결합도 모놀리식 구조의 한계로 의존성이 높아지는 문제가 있었습니다.이를 해결하기 위해 아래와 같은 방법을 이용하였습니다. 1.Kafka + Redisson 수강 신청과 변경은 트래픽이 많은 서비스이므로 Kafka를 활용해 비동기 처리를 구현하고 수업 신청과 같은 요청을 이벤트로 발행해 주요 프로세스와 데이터 저장 작업을 분리, 시스템 성능 저하를 방지하면서도 재처리 시 동일한 결과를 보장할 수 있도록 설계하였습니다. 추가적으로, Redisson 분산 락을 도입해 동일 시간대, 동일 교사의 스케줄에 대한 접근을 제어하며 Race Condition 문제를 해결했습니다. p..
[MSA] 컨테이너 실행 순서
·
카테고리 없음
발생한 문제: 프로젝트를 재 실행할 경우, 서비스간 의존성으로 인해 발생한 오류. 컨테이너 간 실행 순서가 보장되지 않아 발생하는 오류를 방지하기 위해 Docker Compose를 도입했습니다.기존에는 RabbitMQ나 Spring Cloud Bus가 전부 실행될 때 까지 모든 서비스가 계속 재부팅되며 큰 부하가 걸렸습니다. 그래서 Docker Compose를 도입하여 depends_on과 healthcheck를 사용해서 컨테이너 실행 순서를 정한 결과 이전과 다르게 순서대로 컨테이너가 실행되며 큰 부하없이 어플리케이션이 실행되었습니다. services: discovery-service: image: devhong96/scheduler-discovery-service:latest cont..
[MSA] 데이터 조회(테스트 코드 포함)
·
카테고리 없음
발생한 문제 : 데이터 조회시 각 서비스의 독립된 데이터베이스 환경 예를 들어, 수업 서비스가 사용자 정보를 필요로 할 경우, 헤더에 포함된 JWT 토큰을 기반으로 사용자 서비스에서 데이터를 조회하는 방식으로 구현하였고 사용자가 수업 서비스의 정보를 필요로 할 경우도 동일한 방식으로 구현하였습니다. 이 과정에서 토큰 검증은 API Gateway에서 1차적으로 인증된 상태를 활용하였으며 각 서비스간에 발생하는 조회는 OpenFeign 통신 라이브러리를 활용하였습니다. 이를 과정을 통해 데이터 정합성을 유지하면서 서비스 간 결합도를 낮추고, 시스템의 확장성과 유연성을 높일 수 있었습니다.Code@FeignClient( name = "scheduler-member-service", ..
[MSA] 각 서비스간의 인증과 보안
·
카테고리 없음
보호되어 있는 글입니다.
MSA로 전환한 계기와 설계 방향, 그리고 기준
·
카테고리 없음
1. MSA로 전환한 계기 프로젝트는 모놀리식 아키텍처 방식으로 개발하고 전반적인 흐름이 진행되고 있었습니다. 하지만 모놀리식 구조에서는 하나의 애플리케이션에서 모든 도메인 로직이 포함되어 있어서 다른 도메인과의 의존성으로 인해 개발 과정에서 제약이 있었고 하나의 비즈니스 로직에서 오류가 발생하면 모든 애플리케이션에 영향을 주었습니다. 또한 특정 도메인에서 변경 사항이 있을 경우 전체 서비스를 배포하고 빌드를 해야하는 등의 문제도 있어서 MSA로의 전환을 하게 되었습니다.2. 설계 방향성과 기준 마이크로서비스 아키텍처(MSA)로 전환하면서 확장성을 확보하고 종속성을 줄이는 것에 중점을 두었습니다. 바운디드 컨텍스트에 대한 기준을 세운 후, 수업 스케쥴, 사용자와 같은 핵심 도메인과 서브 도메인을 이..
160만건에 대한 조회성능 개선
·
카테고리 없음
1. 테스트 개요시행 배경 : 평균 응답 시간 2.37초(P95 4.46초)해결 방안 : 인메모리 데이터 기반의 Redis 도입하여 레이턴시 절감.Redis를 사용한 이유 : 수업 스케쥴과 같이 데이터가 일정한 형태며 디스크 기반의 몽고 db보다는 인메모리 기반의 redis가 조회속도에서 이점이 있기에 선택.2. 테스트전체 데이터 수: 1,637,346개최대 VUs: 60명시나리오: 1분간 반복 요청평가 항목: 요청 수, 응답 시간, 대기 시간, 실패율 등하드웨어: Synology 920+(CPU: Celeron J4125, RAM : 20GB(4+16)GB)네트워크 공유기 : iptime a6004mx연결 방식 : Nas와 공유기는 유선 이더넷으로 연결테스트 환경 : 클라이언트와 서버는 동일 네트워크 ..
dev.hong96
dev.hong