일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Stream
- mysql
- JPA
- Kotlin
- SpringBoot
- spring
- Java
- K8s
- 스프링
- 백준
- GC
- thread
- 토비의 스프링
- OS
- 스트림
- Stack
- gradle
- 이스티오
- IntellJ
- jvm
- redis
- 자바
- Collection
- MSA
- list
- Real MySQL
- 자바 ORM 표준 JPA 프로그래밍
- 쿠버네티스
- 보조스트림
- 토비의 스프링 정리
- Today
- Total
목록Spring (38)
인생을 코딩하다.
안녕하세요. 오늘은 Pessimistic Lock으로 동시성 제어를 하는 법에 관해 글을 작성해보려 합니다. 저는 상품을 주문하는 API를 개발하고 있었습니다. 여러 사용자가 동시다발적으로 상품을 주문 할 때, 데이터 정합성에 이슈가 발생하는 문제였습니다. 위의 그림처럼 세 명의 사용자가 동시다발적으로 주문을 요청할 시 상품의 총 재고는 70이 되어야하지만, 주문이 동시에 일어나는 바람에 70이 아닌 90이 되어버리는 상황입니다. 총 (10 + 10 + 10)30의 재고가 차감되어야 하지만, 동시에 요청이 일어나서 10의 재고만 차감이 되어버리는 이슈입니다. 이걸 어떻게 해결할 수 있을까요? 이것은 간단하게 JPA의 비관적 락(Pessimistic Lock), 혹은 낙관적 락(Optimistic Lock..
최근에 디프만 프로젝트를 진행하며 회원가입을 위해 이메일 인증 API를 개발하고 있었습니다. 약관 및 정책 등의 링크를 메일로 보내고, 메일에서 링크를 클릭하면 이메일 인증이 되는 flow 였습니다. 허나 이게 로컬에선 잘 돼는데, ec2 서버에서 계속 인증 메일을 보낼 때 AUTH LOGIN failed 발생했습니다. 두 가지 이유가 있엇습니다. 첫 번째 이유는 SMTP의 기본 port는 25입니다. 하지만, Amazon EC2 서버에서는 SMTP port 25을 이용해서 메일을 보내는 것이 전송이 제한이 되어 있기 때문이였습니다. 따라서 Ec2 환경에서 기본 port인 25를 사용하게 돼면 이메일 인증에 실패하게 됩니다. 이는 메일 보내기를 25번 포트가 아닌 다른 포트 465, 587 포트를 사용해..
마이크로서비스별로 기능을 분리하고 저장소를 격리함에 따라 이전에는 불거지지 않았던 문제가 생깁니다. 즉, 여러개의 분산된 서비스에 걸쳐 비즈니스 처리를 수행해야 하는 경우 비즈니스 정합성 및 데이터 일관성을 어떻게 보장할 것인지에 관한 문제입니다. 손쉽게 적용할 수 있는 한 가지 방법은 여러 개의 분산된 서비스를 하나의 일관된 트랜잭션으로 묶는 것 입니다. 이것을 분산 트랜잭션 처리 패턴 이라고 합니다. 분산 트랜잭션 처리 패턴 2단계 커밋 방법 2단계 커밋 방법은 분산 데이터베이스 환경에서 원자성을 보장하기 위해 트랜잭션에 포함돼 있는 노드가 커밋되거나 롤백 하는 메커니즘입니다. 그런데 이 방법은 각 서비스에 잠금이 걸력 발생하는 성능 문제 탓에 효율적인 방법이 아닙니다. 특히 각 서비스가 다른 인스턴..
안녕하세요. 이전 글은 "MSA의 BFF 패턴, 외부 구성 저장소 패턴, 인증 인가 패턴이란?"라는 주제로 글을 작성하였었는데요, 이번에는 "장애 및 실패 처리를 위한 서킷 브레이커 패턴 및 모니터링과 추적 패턴"라는 주제로 글을 작성해 보았습니다. 장애 및 실패 처리를 위한 서킷 브레이커 패턴 여러 서비스로 구성된 시스템에서는 한 서비스에 장애가 발생했을 때 다른 서비스가 영향을 받을 수 있습니다. 이때 장애가 발생한 서비스를 격리해서 유연하게 처리할 수 있는 방법이 필요한데 이를 위한 한 가지 방법이 서킷브레이커 패턴입니다. 시스템 과부하나 특정 서비스에 문제가 생겼을 때 자연스럽게 다른 정상적인 서비스로 요청 흐름이 변경되게 해야합니다. 그러자면 서비스 상태를 항상 실시간으로 관리해서 시각화하고 모..
안녕하세요. 저번 글에서는 Spring cloud 적용에 사용되는 컴포넌트 중 하나인 Eureka에 관해서 글을 작성해 보았습니다. 이번글은 BFF 패턴에 관해 글을 작성해보도록 하겠습니다. BFF (Backend for Frontend) 패턴이란? 최근에는 PC뿐만 아니라 다양한 모바일 장비를 사용하기 때문에 다양한 클라이언트를 고려해야 합니다. 이처럼 다양한 클라이언트를 위해서는 특 화된 처리를 위한 API 조합이나 처리가 필요합니다. 이를 위한 해결 방법으로 BFF(Backend for Frontend) 패턴이 존재합니다. BFF 패턴은 API 게이트웨이와 같은 진입점을 하나로 두지 않고 프론트엔드의 유형에 따라 각각 두는 패턴입니다. 프론트엔드를 위한 백엔드라는 의미로 BFF이라고 부릅니다. 각 ..
저번 글에서는 MSA에 관한 글을 작성했었습니다. 이번 글에서는 각기 다른 IP / Port/ instanceId를 가지고 있는 MicroService(인스턴스서버)들의 정보를 레지스트리에 등록할 수 있게 하고, MicroService의 동적인 탐색과 로드밸런싱을 할 수 있게 도와주는 Spring Cloud 적용에 사용되는 컴포넌트 중 하나인 Eureka에 관해 알아보도록 하겠습니다. Spring cloud(스프링 부트 + 넷플릭스 OSS)란 무엇일까요? 넷플릭스 OSS를 더 쉽게 쓸 수 있도록 스프링 진영의 피보탈에서는 기존의 스프링 부트 프레임워크에서 잘 돌아갈수 잇도록 넷플릭스 OSS 모듈들을 스프링 프레임워크로 감싸서 스프링 클라우드라는 명칭으로 발표했습니다. 비즈니스가 성장하면서 MicroSer..
JWT를 사용하여 인가/인증 처리를 할 때, 로그아웃과 관련된 이슈가 한 가지 있습니다. JWT 특성상 자체 만료시간이 기술되어 있으므로 강제 무효화가 안된다는 문제 입니다. JWT에 직접 기술된 만료시간으로 무효화가 되기 때문이죠. 이런 AccessToken을 무효화하기 위해 Oauth2.0을 사용하여 아래의 그림처럼 opaque token을 고려해볼 수 있습니다. Opaque token이란? 이름에서 알 수 있듯이 전달하는 정보 측면에서 불투명합니다. 토큰은 인증 서버에 저장된 정보를 가리키는 식별자일 뿐이며 서버 측에서 자체 검사를 통해 유효성을 검사합니다. 기존 JWT AccessToken의 자체 만료시간으로 인해 강제 무효화가 안되는 것을 Oauth2의 opaque token을 사용하여 로그아웃..
MSA(MicroService Architecture)란 무엇일까요? 시스템을 여러개의 독립된 서비스로 나눠서, 이 서비스를 조합함으로써 기능을 제공하는 아키텍쳐 패턴입니다. 하나의 기능을 구현 하는데, 여러 개의 서비스를 조합하여 기능을 제공합니다. -> EX) 주문하기 : 사용자 정보 조회, 상품 정보 조회, 신규 주문 생성 왜 MSA(MicroService Architecture)를 사용할까요? 위의 그림의 왼쪽은 Monolitic 구조입니다. Monolitic 구조에는 아래와 같은 문제점이 존재합니다. 단일 Container에 여러 기능을 통합하여 구성 단단한 결합을 통하여 Service를 연결 전체 시스템이 하나의 Project로 구성되어 개발 및 빌드를 통합적으로 진행하여야 함 특정 서비스 및..