배경토비의 스프링 강의를 듣던 중 DIP 관련 내용을 다루는데, 갑자기 내가 담당하고 있던 프로젝트에서 적용되어있는 헥사고널 아키텍쳐에서각 레이어 간 클래스들의 참조의 방향이 DIP 를 잘 만족하는 방향인가에 대한 의문점이 생겨 관련된 내용들에 대한 정의도 정리해보고, 고찰해본 내용을 정리함DIP (Dependency Inversion Principle)먼저 DIP. 의존 역전 원칙에 대한 정의는 이렇게 요약할 수 있다.정의를 잘 살펴보면 두 가지로 분리 가능한 정의 2개의 집합으로 보인다.DIP : 상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안 된다. 둘 모두 추상화에 의존해야 한다헥사고널 아키텍쳐를 적용했을 때, 코드 레벨의 참조의 방향과 DIP 원칙을 같이 따져보기 위해서는조금 추상적으로 느..
1. spring-data-cacheimplementation 'org.springframework.boot:spring-boot-starter-cache' spring-data-cache는 lock 목적이 아니라 DB에 매번 접근하지 않고 조회 성능을 개선하기 위해key-value 형태로 데이터를 저장하는 캐시 용도로 사용하는 것이 일반적이다. Spring 이러한 캐시 사용 패턴을 표준화 하기 위해 AOP 기반으로 동작하는 Spring Cache 추상화를 제공하며개발자는 이를 활용해 @Cacheable, @CacheEvict, @CachePut 등의 애노테이션 만으로 캐시를 적용할 수 있다. @Cacheable : 메서드 결과를 캐시에 저장하고, 다음 호출 시 캐시에서 반환@CacheEvict : 특정..
외부 서비스, 외부 DB에서 I/F를 받은 데이터들을 처리 하기 위하여Spring 에서 간단한 Batch Job 을 할당하고 수행할 때 사용하는 @Scheduled 어노테이션을 활용하는 어플리케이션이 있었다. 처음에는 처리해야하는 테스크들의 양이 많지 않았지만, 프로젝트는 생각보다(항상 그렇듯) 커졌고, 운영하는 과정에서 문제가 발생하여(역시 항상 그렇듯)Trouble Shooting 과 개선한 부분을 기록을 남기고자 한다.문제 상황I/F 되는 데이터들의 성격에 따라 각 데이터를 정제하는 메서드들을 선언하고,@Scheduled 어노테이션을 달아서 I/F 주기에 알맞게 실행시키는 형태로 동작하는 데이터 정제 서비스가 있는데, 특정 테이블의 데이터가 최신이 아니라는 VOC가 올라와서 해당 데이터를 확인해보니..
바로 이전 글, 변경에 안전하게 만들기 위한 OLTP 에서의 정규화 전략에 이어서 OLAP 에서의 정규화 전략에 대해 알아보자. OLAP(Online Analytical Processing)란 무엇일까?OLAP 시스템이란 일반적으로 다음과 같은 요구사항 속에서 운영되어야 하는 시스템이라고 얘기할 수 있음 데이터는 이미 확정된 과거 데이터UPDATE / DELETE는 거의 없음대부분의 쿼리는 SELECT + 집계대량 데이터 스캔이 빈번이런 상황에서는 '변경 비용'보다 '조회 비용'이 훨씬 중요하다. OLTP에서의 정규화가 변경에 안전한 구조를 만드는 것을 목적으로 했다면,OLAP에서의 설계 목적은 어떤 데이터 구조가 더 빠른 응답 속도를 제공할 수 있는가에 있다. 이 질문에 대한 답을 찾는 과정에서 등장한..
