아키텍쳐

· DDD
어떤 경우 사용하나? 두 개 이상에 프로퍼티를 한 개 컬럼에 매핑해야 할때 사용한다. DB 컬럼과 밸류를 양방향으로 변환시켜 준다. 이처럼 변환되는 코드를 모델에 구현하지 않고 AttributeConvertor를 사용해서 변환처리를 한다. 예를 들어 Length 밸류 객체는 int value와 String unit 필드를 가지고 있을때 DB상에는 value+unit로 저장된다. AttributeConverter Interface package javax.persistence; public interface AttributeConverter { public Y convertToDatabaseColumn (X attribute); // 밸류 타입을 DB 컬럼 값으로 변환 public X convertToEn..
· DDD
엔티티(Entity) 식별자를 갖는 객체 식별자 유형 특정 규칙에 따라 생성 UUID 사용 (java.util.UUID) 값을 직접 입력 일련번호 사용(시퀀스나 DB의 자동 증가 컬럼 사용)\ // 엔티티 클래스 @Entity @Table(name = "member") public class Member() { @Id private int id; // 식별자 } 밸류(Value) 타입 개념적으로 완전한 하나를 표한할 때 사용한다. 예를들어 주소(zipcode, address, detailAddress), 받는 사람(name, phoneNumber) 등등 // 엔티티 클래스 @Entity @Table(name = "member") public class Member() { @Id private int id..
· DDD
BOUNDED CONTEXT 간 직접 통합 서비스를 구축하다 보면 두 BOUNDED CONTEXT 간에 통합이 필요할 때가 있다. 두 BOUNDED CONTEXT를 직접적으로 통합하는 방식으로 주로 두 BOUNDED CONTEXT 간에 REST API를 호출하는 방식(직접 통합)이 있다. 두 BOUNDED CONTEXT을 통합하는 도메인 서비스를 사용한다. // 상품 추천 기능을 표현하는 카탈로그 도메인 서비스 public interface ProductRecommendationService { public List getRecommendationsOf(ProductId id); } 도메인 서비스를 구현한 클래스는 infraStructure 영역에 위치한다. 만약 외부 시스템에서 받아온 데이터가 내부에서..
· DDD
BOUNDED CONTEXT 도메인마다 같은 용어라도 의미가 다르고 같은 대상이라도 저장하는 용어가 다를 수 있다. 그러므로 도메인을 완벽하게 표현하는 단일 모델을 만드는 것은 불가능 하다. 모델은 특정한 컨텍스트(문맥)하에서 완전한 의미를 갖는다. 이렇게 구분되는 경계를 갖는 컨텍스트를 DDD에서는 BOUNDED CONTEXT라고 부른다. BOUNDED CONTEXT는 모델의 경계를 결정하며 한 개의 BOUNDED CONTEXT는 논리적으로 한 개의 모델을 갖는다., 하지만 그렇지 않은 경우가 많다. BOUNDED CONTEXT는 각자 구현하는 하위 도메인에 맞는 모델을 갖는다. 조직 구조에 따라 BOUNDED CONTEXT 결정 예를 들어, 주문 하위 도메인이라도 주문을 처리하는 팀과 복잡한 결제 금..
· MSA
Zuul 이란? Zuul은 넷플릭스에서 만든 API Gateway로 그루비로 작성되었으며 filter 개념을 통해서 API Gateway에 추가 기능을 넣고 관리할 수 있다. Microservice Architecture 에서 여러 클라이언트 요청을 적절한 서비스로 프록시하거나 라우팅하기 위한 서비스 Zuul을 왜 사용하는가? MSA를 구성하는 여러 서비스들의 엔드 포인트가 API 게이트웨이에 의해 단일화가 된다. 클라이언트로부터 시스템의 복잡도를 숨기는 효과 또한 기대할 수 있다. 다양한 형태의 요청과 많은 트래픽으로 생기는 문제를 신속하고, 동적으로 해결하기 위해서 groovy 언어로 작성된 다양한 형태의 Filter를 실행 Zuul Filter Zuul Filter는 크게 4가지 Filter로 나누..
· MSA
Spring Cloud Feign 이란? Netflix에서 개발된 Http client binder RestTemplate 호출 등을 JPA Repository 처럼 interface로 단순화 가능 Spring Data JPA 에서 실제 쿼리를 작성하지 않고 Interface 만 지정하여 쿼리실행 구현체를 자동으로 만들어주는 것과 유사 사용법 1. Feign Dependency 추가 ServiceA build.gradle dependencies { ... compile('org.springframework.cloud:spring-cloud-starter-openfeign') } 2. Main Class에 @EnableFeignClients 추가 ServiceA main class @EnableEureka..
· MSA
Eureka란? Middle-tier server(비지니스 로직이 위치한 애플리케이션 서버단)의 로드밸런스와 Failover를 위해 서비스를 배치해주는 REST 기반 서비스 주로 AWS Cloud에서 사용된다. Eureka Client Java 기반 클라이언트 요소도 있는데, 서버와 상호작용을 더 쉽게 해주는 것을 Eureka Client라 부른다. Ribbon - Client LoadBalancer 방식을 기본으로 사용하는 로드밸런서를 내장하고 있다. Netflix에서는 Eureka에서 기본 로드 밸런스 외에도 트래픽, 리소스 사용량, 에러 상황 요소에 따라 로드밸런스를 할 수 있도록 제공하고 있다. Eureka Server의 필요성 AWS Cloud에서는 특성상 서버가 자주 꺼졌다 켜졌다 한다. IP..
· MSA
Ribbon 이란? Called(API Caller)에 탑재되는 S/W 모듈 주어진 서버 목록에 대해서 Load Balancing을 수행함 Ribbon의 장점 H/W가 필요없이 S/W로만 Load Balancing 가능(비용 ⬇️, 유연성 ⬆️) 서버 목록의 동적 변경이 자유로움(단 Coding 필요) Load Balancing Schema를 마음대로 구성 가능(단 Coding 필요) 매우 다양한 설정 가능(서버선택, 실패 시 skip시간, Ping체크 등등) Retry 기능이 내장되어 있음 Eureka - Service Discovery 와 함께 사용되어 매우 강력한 기능 발휘(서버 목록을 자동으로 관리) Twelve-Factors 의 설정(Config)에 적합 사용법 1. Ribbon Dependen..
· MSA
Hystrix 란? 서킷브레이커 즉 회로차단기는 전기 기기에서 과부하나 과전류가 들어왔을때 메인 기기를 보호하기 위한 흔히 쓰는 회로 차단기를 말한다. MSA에서 서킷 브레이커는 특정 MSA 서비스의 장애로 인해 다른 MSA 서비스에도 장애를 일으킬 수 있는 가능성을 방지하기 위해 사용 Hystrix의 대표 기능 Thread timeout, 장애 대응 등을 설정해 장애 시 정해진 루트를 따르도록 할 수 있다. 미리 정해진 임계치를 넘으면 장애가 있는 로직을 실행하지 않고 우회 하도록 할 수 있다. 사용법 1. Hystrix Dependency 추가 ServiceA build.gradle dependencies { ... compile('org.springframework.cloud:spring-cloud..
beekei
'아키텍쳐' 태그의 글 목록