ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 개발 키워드 알아보기
    개발/키워드 2022. 2. 2. 10:24

    Hexagonal Architecture

    포트와 어댑터 패턴이라고도 불리는 듯 싶다. 구현체에 의존되지 않기 위해서 포트(외부 구현체와 연결하는 인터페이스)와 어댑터(외부 구현체)를 분리하여 작성하는 설계 방식인 듯 싶다. 포트는 entry point 이다. 외부 구현체에 얽매이지 않고 인터페이스를 통해 application과 연결된다. 여기서 UserInterface는 domain을 의미하는 듯 하며, Application은 domain을 조합하는 부분, Infrastructure는 외부 시스템과의 연결을 의미하는 듯 싶다.

    출처: https://medium.com/ssense-tech/hexagonal-architecture-there-are-always-two-sides-to-every-story-bc0780ed7d9c

    - LineEngineering의 관련 참고 글

    - Hexagonal Architecture 참고 글

    상태머신

    현재 상태(Current State)에서 어떤 특정한 사건(Event)에 의해 다른 상태로 변화할 수 있다. 이것을 전이(Transition)이라고 한다. 상태패턴(State pattern)은 객체지향 방식으로 상태기계를 구현하는 디자인 패턴이라고 한다.

    상태와 행위를 구분해야 한다고 한다. 내가 생각하는 예시를 들어보겠다. 열린 상태와 여는 행위는 다르다. 예를 들어 닫힌 상태에서 여는 행위를 하면 50% 열린 상태가 될 수도 있다. 하지만 이것은 완전히 반열린 상태이다. 반열린 상태에서 여는 행위를 한다면 100% 열린 상태가 될 수 있다. 따라서 같은 여는 행위이지만 현재 상태에 따라서 전이되는 상태는 다를 수 있다. 행위와 상태는 같을 수도 있지만 분리하여 생각해야 한다고 한다.

    생각보다 이해할만한 많은 자료가 찾아지지 않아서 이 부분은 좀 다른 공부를 하다보면 깊게 이해될 것 같다.

    Spring Context Caching

    Spring 컨텍스트를 사용하는 테스트에서 캐싱이 사용되는데 그에 캐싱되는 key는 다음과 같다.

    - locations (from @ContextConfiguration)
    - classes (from @ContextConfiguration)
    - contextInitializerClasses (from @ContextConfiguration)
    - contextCustomizers (from ContextCustomizerFactory) – this includes @DynamicPropertySource methods as well as various features from Spring Boot’s testing support such as @MockBean and @SpyBean.
    - contextLoader (from @ContextConfiguration)
    - parent (from @ContextHierarchy)
    - activeProfiles (from @ActiveProfiles)
    - propertySourceLocations (from @TestPropertySource)
    - propertySourceProperties (from @TestPropertySource)
    - resourceBasePath (from @WebAppConfiguration)

    activeProfiles를 공유하거나 Configuration을 공유한다면 캐싱되어 같은 컨텍스트를 사용하게 될 것이고, 스프링 컨텍스트를 띄우는 테스트에서 사용되는 빌드 프로세스가 줄어들 것이다. 캐싱은 static 변수에 저장되어 정적 캐싱을 사용하게 된다. 이때 DirtiesContext를 사용한다면 해당 어노테이션은 캐싱된 컨텍스트를 사용하는 것이 아니라 새로운 컨텍스트를 다시 빌드하도록 만든다.

    - 스프링 공식문서 Context Caching

    QoS

    어떤 맥락에서 QoS를 알게되었는지 기억이 안 나서 정리하는 내용이 맞는지 잘 모르겠다. QoS는 Quality of Service의 약자로 여러 응용 프로그램, 사용자, 데이터 등에 우선순위를 정하여 데이터 전송에 특정 수준 이상의 성능을 보장하기 위한 것을 의미한다. 통신 서비스 품질이라고 한다. 네트워크에서 트래픽을 조절하는 것을 의미하는 듯 하다.

    - 위키 QoS

    Rule Engine

    룰 엔진은 대체 계산 모델을 제공하는 것이라고 한다. 특정한 규칙을 통해서 결과를 알려주는 계산을 해주는 역할 모델을 의미하는 듯 하다. input이 들어올 때, 내부 계산을 통해 output을 주는 역할을 의미하는 것 같다. 이러한 계산 규칙들이 복잡해지고 다른 부분과 얽히게 될 때, 해당 부분만 따로 떼어내어 rule engine 역할을 부여하는 듯 싶다.

    - 마틴파울러 RuleEngine 글

    Decoder

    Spring에서의 Decoder를 검색하다보니 나오는 많은 자료가 feignClient를 사용하면 나오게 되는 개념인 듯 하다. 사실 좀 찾아보니 통신 프레임워크에서 incode, decoder가 필요한 듯 싶은데, feignClient가 통신하는 모듈이라 필수적으로 필요한 것 같다. (마치 json 파일로 통신을 할 때, json 직렬화, 역직렬화로 변환하는 것과 같은 개념인 듯 싶다.)

    FeignClient는 기본적으로 400번대, 500번대 에러에 대해서 ErrorDecoder.default를 사용한다고 한다. 하지만 로깅 등 부가적인 에러핸들링이 필요할 경우 ErrorDecoder를 커스텀하여 사용해야 한다고 한다.

    - 참고한 블로그

    - Spring 공식문서 Declarative Feign 관련

    '개발 > 키워드' 카테고리의 다른 글

    AWS 서비스  (0) 2022.03.10

    댓글

Designed by Tistory.