정리 외부 라이브러리를 직접 만들고 그것을 프로젝트에 라이브러리로 불러서 적용해봄. 그런데 라이브러리를 사용하는 클라이언트 개발자 입장을 생각해보면, 라이브러리 내부에 어떤 빈을 등록해야하는지 알아야 하고, 그것을 하나씩 다 빈으로 등록해야 함. 만약 초기 설정이 복잡하다면, 사용자 입장에서는 상당히 귀찮은 작업이 될 수 있음. 이런 부분을 자동으로 처리해주는 것이 스프링 부트의 Auto Configuration임. 순수 라이브러리 만들기 @AutoConfiguration을 이해하기 위해서는 라이브러리가 어떻게 사용되는지 이해가 필요하다. 앞서 생성한 Memory 패키지를 여러 곳에서 사용할 수 있도록 라이브러리로 만들어보자. 여기서는 순수 라이브러리를 만들어서, 특정 프로젝트에서 수동으로 스프링 빈으로..
요약 스프링 부트는 AutoConfiguration 기능을 제공함. 스프링부트가 제공하는 자동 구성 기능을 이해하려면 다음 두 가지 개념을 이해해야함. @Conditional : 특정 조건에 맞을 때 설정이 동작하도록 함. @AutoConfiguration : 자동 구성이 어떻게 동작하는지 내부 원리 이해. 스프링부트가 제공하는 자동 구성 기능을 이해하려면 다음 개념을 이해해야 함. @Conditional : 특정 조건에 맞을 때 설정이 동작하도록 함. @AutoConfiguration : 자동 구성이 어떻게 동작하는지 내부 원리 이해 자동구성 - 예제 만들기 @Slf4j @Configuration public class DBConfig { @Bean public DataSource dataSource(..
코드 사용된 코드는 이곳에서 확인할 수 있습니다. ApplicationEventPublisher를 이용하기 스프링부트는 ApplicationEventPublisher 객체를 자동으로 스프링빈으로 등록해준다. 이 객체를 이용하면 객체 간의 의존 관계를 줄이는 방향으로 코드를 작성할 수 있다. 의존성이 약해지면서 상대적으로 문맥 파악이 어려워진다는 단점이 있지만 불필요하게 강하게 결합한 객체들을 분리해 줄 수 있어서 좋을 때도 있다. @RestController @Slf4j @RequiredArgsConstructor public class MyController { private final ApplicationEventPublisher eventPublisher; @GetMapping("/event") p..
들어가기 전 이 글은 가상 면접 사례로 배우는 대규모 시스템 설계 기초를 공부하며 작성한 글입니다. 6. 키-값 저장소 설계 Key-Value Store는 비관계형 데이터베이스다. 많이 알려진 녀석들은 아마존의 Dynamo, Memcached, Redis 같은 것들이 존재한다. 데이터는 다음과 같은 형태로 저장된다. Key Value 145 john 147 bob 문제 이해 및 설계 범위 확정 모든 것을 만족할 수는 없고, 요구 사항을 고려해서 트레이드 오프를 결정해야한다. 요구사항은 다음과 같다. 높은 가용성을 제공해야 함. 시스템은 장애가 있더라도 빨리 응답해야 함. 높은 규모 확장성을 제공해야 함. 트래픽 양에 따라 자동적으로 서버 증설 / 삭제가 가능해야 함. 데이터 일관성 수준은 조정 가능해야 ..
5장. 안정 해시 설계 수평적 규모 확장성을 달성하기 위해서 요청 / 데이터를 서버에 균등하게 분포하는 것은 중요한 일이다. 이 작업은 '안정 해시'로 구현될 수 있다. 해시 키 재배치(Rehash) 문제 N개의 캐시 서버가 있을 때, 서버들에 균등히 부하를 나누는 보편적인 방법은 아래의 해시 함수를 사용하는 것이다. serverIndex = hash(key) % N (N은 서버의 개수) 이 방법으로 해시키를 분배할 경우 초기에는 균등히 분배되지만, 서버가 추가/삭제 되었을 때 많은 해시 키가 재배치 된다. 4대의 서버가 3대의 서버로 줄었을 때를 가정하면 아래 결과를 볼 수 있다. 키 해시 해시 % 4 해시 % 3 key0 18358617 1 0 key1 26143584 0 0 key2 18131146..