본문 바로가기

소프트웨어공학18

Multi datasource, router datasource 멀티-테넌시란?멀티-테넌시는 소프트웨어 어플리케이션의 단일 이느턴스가 여러 고객에게 서비스를 제공하는 아키텍처 이다.아래 그림에서 보듯이 싱클 테넌시와 멀티테넌시는 확실하게 구분된다. 싱글테넌시의 경우 사용자 별로 어플리케이션과 Database 가 존재한다.멀티테넌시의 경우엔 하나의 어플리케이션에서 여러 테넌트(tenant,사용자)가 사용할 수 있도록 해준다.멀티테넌시를 구축하는 이유는 고객마다 새로운 시스템을 만들 필요가 없기 때문에 소프으웨어 개발과 유지보수 비용을 절약 할 수 있기때문에 경제 적이다.멀티테넌시를 구축하는 방법은 여러 방법이 있다. 인프라 적인 부분, 소스코드에서 분기 혹은 database 에서 분리등 여러 방법을 이용하여 테넌트 분리가 가능 하며 대표적으로 다음과 같이 구분 해볼 수.. 2025. 1. 9.
tenant id 에 따른 datasource 분리 , 인터셉터 Client 에서 Header 값을 통해 Datasource 를 선택하기 위함. Flow (흐름도)Headertanent-id : poc----Headertanent-id : kakao-games Client 에서 정의된 Header 정보를 담아 보낸다.Interceptor 에서 정의된 ID 값 을 기준으로 Router 를 선택한다.LocalThread에 저장된 정보를 읽어와 DB 정보를 FIX 한다.Controller, Service, 를거쳐 Repository 에 도달 했을때 앞서 선택된 router 정보에 의해 datasource를 결정하고 사용한다. 2025. 1. 9.
플라이 웨이트 (flyweight pattern) 플라이 웨이트 (flyweight pattern) -wr 오브젝트의 공통된 데이터를 공유함으로 메모리사용을 줄여주는 패턴이다. 즉 인스턴스 생성시 메모리 낭비를 줄이려는 목적이다. 어떤 객체를 사용하기 위해 매번 인스턴스를 생성하지 않는다. 한번만 사용하고 다시 필요할때 이전에 생성된 객체를 재사용 할 수있다. 객체생성시 많은 자원을 소모할 경우 해당 패턴을 이용하여 적은 자원으로 객체를 재사용 할 수있다. 예시) 게임의 예시가 가장 올바르게 보인다. 마인크레프트나 심시티같은 게임상에서 나무를 표현할때 혹은 스타그래프트와 같은 전략 게임에서 유닛에 대해 생성을 할때 같은 오브젝트가 있다고 하면 객체를 하나의 팩토리에 저장해 두었다가 재사용 할 수 있다. 만약 이것을 재사용하지 않고 생성될때마다 새롭게 인.. 2023. 1. 27.
어텝터(adapter) 어텝터(adapter) 어뎁터패턴이란? 어뎁터페턴은 우리가 일상생활에서 사용하는 어뎁터와 비슷하다. 호환이 되지 않는 부분을 어뎁터를 통해 호환가능하게 만들어 주는것이다. 헤더퍼스트에서는 어댑터패턴을 이렇게 정의하고 있다. 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환합니다. 어뎁터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 사용할 수 있다. 말이 조금 어려운데 조금 쉽게 설명하자면 이럴 것 같다. 원래 사용 중인 인터페이스와 라이브러리가 있는데, 새로운 곳에서 사용하기 위해서는 지금의 라이브러리로는 사용하기 어렵다. 이때 어뎁터패턴을 이용하여 기존 기능을 최대한 살리면서 기능을 제공하는 것이다. 즉 코드의 재사용성을 높이는 의도로 볼 .. 2023. 1. 11.
728x90