Spring Fallback
·
개발
넷플릭스의 Hystrix 라이브러리는 분산 시스템을 보다 resilient하게 만드는데 중요한 역할을 했다. 이것은 주로 circuit breaker 기능으로 알려져있지만, 다른 특징은 이것이 fallback mechanism을 제공한다는 것이다. fallback은 어플리케이션이 비록 잠재적으로는 degraded mode로 동작함에도 지속적으로 동작하도록 만든다. 이는 특정 서비스의 운영이 실패해도 마찬가지이다. 다만 Hystrix는 현재 Spring Cloud에서 Deprecated 이기에 스프링 2.X 버전 이상부터는 Hystrix가 아닌 Resilience4j를 사용하는 것을 권장한다. Fallback이란,  Main logic이 실패했을 경우에 대안적으로 다른 response를 내려주는 것을 의미..
견고한 MSA
·
개발
MSA의 비싼 아키텍처가 유행하게 되면서 서비스의 회복성(resilence)의 중요성은 점점 대두되고있다.Spring Cloud에서는 개발자들이 회복성있는 마이크로 서비스를 구현할 수 있는 몇몇 기능을 제공한다. 몇몇 기능 중 대표적으로 Retry와 Fallback을 소개할 예정이다. 이 둘은 견고한 시스템에서 우아하게 실패들을 처리할 수 있는 중요한 구성 요소이다. 들어가기에 앞서.... 서론 - 마이크로 서비스의 필요성?분산 시스템에서는 마이크로 서비스들이 agility, scalability, maintainability를 중요 요소로 여겨진다. 이러한 장점들 덕에 마이크로서비스가 인기를 얻었다고해도 과언이 아니다. 하지만 이 요소들은 시스템을 위태롭게하는 요소중에 하나이기도 하다. 때문에 마이크로..
어떤 것을 개선할 것인가?
·
개발
하고 싶은 것?라이브러리 분석/파악jacksonstripe sdk의 구조를 우리 서비스에 맞춰보기exception handler 올바르게 이해하고 있는지@Transaction의 원리와 순서지금 보다 더 나은 설계 방향 제시?더나은 설계란? 이를 증명하기 위한 수치 데이터는 어떻게 측정할 것인가?현재 문제점?webhook을 실행 중인 모든 local server에서 받으면서 webhook logic이 모든 로컬 서버에서 실행됨. 이를 해결하는 방법?!내가 발생시킨 이벤트만 응답하도록?편하게 webhook listening을 껐다 킬 수 있도록개선 할 수 있는 것?정확한 ROI 판단을 위하여 쌓을 수 있는 데이터가 무엇이 있을지 고민하기성능 개선을 여부를 확실하게 파악할 수 있는 데이터들이 필요 -> 수치화..
AWS transit gateway
·
개발
What is AWS Transit Gateway?- 중앙 허브를 통해 VPC(Virtual Private Cloud)와 온프레미스 네트워크를 연결- 복잡한 피어링 관계를 제거하여 네트워크를 간소화- Transit Gateway는 고도로 확장 가능한 클라우드 라우터 역할 Why use Transit Gateway?- 아키텍처 간소화- 가상 프라이빗 클라우드 및 엣지 연결에 대해 더 나은 가시성을 확보 및 효과적인 제어- AWS 글로벌 프라이빗 네트워크의 리전 간 피어링 암호화를 통해 보안을 개선 핵심 개념- 연결 : 각 연결은 하나의 라우팅 테이블과 연결하나 이상의 VPCAWS Direct Connect rpdlxm dnpdl다른 Transit Gateway와의 피어링 연결Transit Gateway에 ..
Spring boot application.yml Configuration
·
개발
# application.ymlapp: name: MyApplication version: 1.0 features: enableFeatureX: true enableFeatureY: false #kotlin - 클래스는 위의 설정 값으로 매핑됨@ConfigurationProperties("app")class AppProperties { lateinit var name: String lateinit var version: String lateinit var features: Features class Features { var enableFeatureX: Boolean = false var enableFeatureY: Boolean = f..
보상 트랜잭션으로 분산 환경에서도 안전하게 환전하기!
·
개발/Server
1. 분산 환경이 만들어진 이유?- monolithic system : 서비스가 커지며 배포/개발 경험/단일 장애점/확장성에 문제가 발생- MSA로 분리 -> 기존에 존재하던 로직들을 분리된 서버로 옮겨가는 방식- 신규 domain에 대해서는 DB까지 분리된 MSA서버에 개발- 환전이 같은 DB + 단일 서버에 구현되어 있다면, 굉장히 간단하게 구현이 가능함. e.g) transaction을 열어 각 계좌(원화/외화)에 업데이트 후 transaction commit하면 됨 (쉽게 원자성 보장가능)- 분산 환경에서 원화 계좌/ 외화 계좌가 분리되고 각각의 DB를 사용할 경우?! 분산 트랜젝션을 통해 원자성을 보장해야함  2. 2PC(2 phase commit) vs SAGA(Saga pattern)- 분산..
웹뷰로 시작되는 nestJS로 똑똑하게 서류 스크래핑하기
·
개발/Server
AS ISService Webview Scraping Webview메시지를 통해 요청을 통해 주고 받는 구조문제점 : 어떤 메시지를 주고 받을지 사전에 커뮤니케이션이 필요(커뮤니케이션 비용 증가) + 메시지가 화면에 종속되어 있어 테스트가 어려움 + 디버깅과 테스트가 어려움요구사항 : 병렬처리 가능 + 이슈 발생 시 디버깅 용이 + 서비스의 시작과 끝이 명확해지도록 + 모두의 생산성이 올라가는 방향Message vs API메시지 스펙 정의를 위한 사전 협의 필요 vs 표준화된 스펙으로 통신 때문에 협의 불필요서비스 개발에 필요한 비용이 큼 vs 서비스 개발에 필요한 비용이 적음유지 보수가 난해하고 어려움 vs 서비스 유지 보수가 상대적으로 쉬움**나의 생각 : 결국 메시지를 도입하는 것은 비동기적 처리..
[대규모 시스템 설계 기초2] 1장 근접성 서비스 (1)
·
개발/Server
들어가며: [가상 면접 사례로 배우는 대규모 시스템 설계 기초1] 책을 우연히 읽고 배우게된 내용이 많아 [가상 면접 사례로 배우는 대규모 시스템 설계 기초2]도 바로 구매하여 읽게 되었다. 어떤 서브스에 대하여 시스템이 어떤 구조로 설계되어 있고 그런 구조로 설계된 근거들에 대해서 단계 단계 설명한다. 특히나, 새로운 feature에 대하여 개발할 때 참고하여 적용할만한 내용을 많이 담고 있어 읽으면서 이미 구현해본 내용에 대한 아쉬움과 앞으로 적용해볼만 사항들을 정리해볼 수 있을 것 같다.  1장 근접성 서비스(proximity service) 근접성 서비스는 음식점, 호텔, 극장, 박물관 등 현재 위치에서 가까운 시설을 찾는데 이용된다.   1단계: 문제 이해 및 설계 범위 확정 서비스를 구현하기 ..