
동시성 문제란 여러 프로세스 또는 스레드가 하나의 공통된 자원에 접근하려 할 때 발생하는 문제를 말합니다.Ecommerce 프로젝트를 진행하면서, 재고 관리 시스템 내 다음과 같은 동시성 문제가 발생했습니다.하나의 상품을 동시에 여러 회원이 주문했을 때, 상품 재고가

동시성 문제를 해결하기 위한 방법으로는 다음과 같이 4가지 방법이 있습니다.1\. Java synchronized2\. Pessimistic Lock3\. Optimistic Lock4\. Distributed Lock1번 synchronized는 성능 및 로드 밸런싱

단일 상품 단위로 생각해봤을 때는 몰랐지만, 위시리스트 내 전체 상품을 한번에 주문할 경우, Lock을 어떻게 걸어야 할까라는 의문이 들었습니다.처음에는 어차피 리스트 내 모든 상품이 다른 종류의 상품이니 상관없다라고 생각했었습니다. 따라서, 위시리스트의 첫번째 항목에

애플리케이션에서 자주 조회되는 데이터는 처음 메인 페이지의 첫 페이지에 있는 데이터들입니다.ecommerce 프로젝트에서 메인페이지는 보통 상품 목록 데이터들이 있습니다.애플리케이션의 전체적인 성능을 높이기 위해서는 자주 조회되는 데이터를 '캐싱' 해주면 되겠다고 생각

Spring Cache Abstraction 정리Spring Boot Cache 이해하고 설정하기 -2 : 사용 및 활용 예시(https://adjh54.tistory.com/166- \[무신사 watcher] @Cacheable 중복되는 key값 어떻게 처리

상품 목록 캐싱하기 > #### 💡 캐싱을 위해 Redis를 도입한 이유 의사결정 이유 개요 위의 의사결정으로 인해 Redis를 사용하여 캐싱을 구현하려고 합니다. 필자의 프로젝트 내에서 캐싱을 적용해 볼만한 개소는 조회가 많이 발생하는 메인페이지의 상품 목록

공식문서Resilience4j_CircuitBreakerCircuitBreaker는 CLOSED, OPEN, HALF_OPEN 세가지 일반 상태와 DISABLED 및 FORCED_OPEN의 특수 상태를 갖습니다.출처 : https://resilience4j.r

CircuitBreaker 및 Retry를 적용할 개소를 생각하던 중, 마땅히 떠오르는 개소가 없어서 미뤄뒀던 프로젝트 적용을 해보려고 합니다.각 패턴을 적용할 개소에 대해 조금 생각해보자!요청이 일시적으로 실패하며, 곧 회복이 가능한 경우에 주로 사용을 합니다.즉,

이커머스 프로젝트를 진행하면서 주문 엔티티의 상태를 주기적으로 변경되도록 구현해줘야 했습니다. 이를 위해서 사용한 것이 Spring 에서 지원하는 스케줄러 입니다.스케줄러 사용을 위해 관련 이론을 학습한 뒤 프로젝트에 적용해보고 테스트 해보겠습니다.

이번 포스팅에서는 Order-Service 내 주문처리 관련 로직을 리팩토링 하겠습니다.리팩토링을 진행하는 이유는 다음과 같습니다.wishlist 상품 일괄 주문 등록 실행 중 오류이전 포스팅 내용에 따르면, 인적 오류를 줄이기 위해 기존에 코드의 복잡성을 낮추기 위해

이번 포스팅에서는 User-Service와 API Gateway에 구현한 인증/인가 관련 로직을 리팩토링 하겠습니다.해당 로직은 기존에 권한 확인에 대한 로직을 별도로 구현하지 않았습니다.즉, JWT 인증 및 검증 처리만 구현되어 있던 상태였습니다.기존에 이처럼 구현한

Refactorying

라우터들 중 먼저 정의된 라우터가 우선 매핑된다는 부분에 대해 알게된 직후 해당 라우트에 정의된 필터는 필터 체이닝 내에서 어떠한 우선순위로 적용되는지에 대한 궁금증이 생겨 해당 포스팅을 작성했습니다.Spring Gateway Filter 공식 문서spring-clou

회원가입 시 본인 인증 절차를 통해 서비스 내 회원의 신원 확인을 통해 보안성을 높이고, 타인이 개인 정보를 확인하지 못하도록 막을 수 있는 수단으로써 사용될 수 있습니다.해당 포스팅은 "이메일 인증" 기능 관련 필자가 구현했던 내용과 정리한 내용들을 담은 글입니다.이

웹 서비스 기능 구현 후 대용량 트레픽이 들어올 때 어떻게 동작할 지 궁금하였고, 성능 테스트를 진행하기 위해서 해당 포스팅을 작성하였습니다.성능 테스트는 사용자의 만족도와 연관이 깊습니다. 웹 애플리케이션의 성능을 최적화 해놓아야 서비스를 사용하는 클라이언트 입장에서

프로젝트 개발 후 각 서비스를 docker 이미지로 빌드한 뒤 dockerhub에 push 해보려고 하는데, 생각해보니 관련 설정 파일들도 이제 git에 함께 관리해줘야 했습니다.하지만, 내부 민감 정보들이 있어 해당 정보들을 우선 암호화 방식으로 처리할까 했었지만,

Config-Server와 Private Repository 간의 연결을 위해서 다음과 같이 설정한 뒤 프로젝트를 실행했습니다.콘솔에 다음과 같은 오류가 발생했습니다.이를 확인해보니 Github 내 private repository에 엑세스하기 위해서는 SSH 프로토콜

가상화는 물리적인 컴퓨터 리소스를 다른 시스템이나 애플리케이션에서 사용할 수 있도록 제공하는 것을 말합니다.가상화에는 크게 "플랫폼 가상화"와 "리소스 가상화"로 나뉩니다.가상 머신 매니저 역할을 수행하는 개념입니다. 다수의 운영체제를 동시에 실행하기 위한 논리적인 플

이전까지 Docker에 대한 개념을 간단하게 얘기해봤습니다. 이번 포스팅에서는 도커를 어떻게 사용하는지에 대해서 알아보겠습니다.Docker 사용 관련 포스팅https://subicura.com/2017/01/19/docker-guide-for-beginners

이전까지는 Docker Container와 Image 관련 명령어들을 사용하여 컨테이너를 실행해봤습니다. 이번 포스팅에서는 실제 Docker build를 통해 이미지 파일을 생성하고 Dockerhub에 올리는 작업을 해보겠습니다.Docker 이미지 배포 관련 포스팅ht

개요 Docker의 개념에 대해서 정리해보고 학습 및 실습을 해봤습니다. 이전까지는 Docker를 모호하게 어려운 개념으로 생각했다면, 이제는 기존의 가상화가 가진 문제점을 해결하고 가볍게 사용할 수 있는 편리한 도구라는 생각이 듭니다. 이번에는 도커 이미지 빌드를

이전까지 Docker에 관련된 기본 내용들에 대해서 학습했습니다. 하지만, BooTakHae 라는 프로젝트는 MSA 구조로 하나의 Dockerfile로 이미지를 빌드한다고 해서 서비스를 실행할 수 없습니다. 따라서, BooTakHae 서버를 실행시킬 방법으로 Docke