본문 바로가기

전체글236

[스프링 핵심 원리 - 기본편] 스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext를 스프링 컨테이너라 합니다. ApplicationContext는 인터페이스입니다. 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있습니다. 직전에 AppConfig를 사용했던 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것입니다. 자바 설정 클래스 기반 스프링 컨테이너(ApplicationContext) new AnnotationConfigApplicationContext(AppConfig.clss); 이 클래스는 Applic.. 2021. 9. 11.
[스프링 핵심 원리 - 기본편] 스프링으로 전환하기 AppConfig 스프링 기반으로 변경 @Configuration public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } @Bean public OrderService orderService() { return new OrderServiceImpl(memberRepository(), discountPolicy()); } @Bean public DiscountPolicy discountP.. 2021. 9. 11.
[스프링 핵심 원리 - 기본편] IoC, DI, 그리고 컨테이너 제어의 역전 IoC(Inversion of Control) 기존 프로그램은 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성하고, 연결하고, 실행했습니다. 한마디로 구현 객체가 프로그램의 제어 흐름을 스스로 조종했습니다. 개발자 입장에서는 자연스러운 흐름입니다. 반면에 AppConfig가 등장한 이후에 구현 객체는 자신의 로직을 실행하는 역할만 담당합니다. 프로그램의 제어 흐름은 이제 AppConfig가 가져갑니다. 예를 들어서 OrderServiceImpl은 필요한 인터페이스들을 호출하지만 어떤 구현 객체들이 실행될지 모릅니다. 프로그램에 대한 제어 흐름에 대한 권한은 모두 AppConfig가 가지고 있습니다. 심지어 OrderServiceImpl도 AppConfig가 생성합니다. 그리고 A.. 2021. 9. 10.
[사용자 수에 따른 규모 확장성] 데이터베이스의 규모 확장 저장할 데이터가 많아지면 데이터베이스에 대한 부하도 증가합니다. 데이터베이스의 규모를 확장하는 데는 두 가지 접근법이 있습니다. 하나는 수직적 규모 확장법이고 다른 하나는 수평적 규모 확장법입니다. 수직적 확장 스케일 업이라고 부르는 수직적 규모 확장법은 기존 서버에 더 많은, 또는 고성능의 자원(CPU, RAM,디스크 등)을 증설하는 방법입니다. 약점 데이터베이스 서버 하드웨어에는 한계가 있으므로 CPU, RAM 등을 무한 증설할 수는 없습니다. 사용자가 계속 늘어나면 한 대 서버로는 결국 감당하기 어렵게 될 것입니다. SPOF(Single Point of Failure)로 인한 위험성이 큽니다. 비용이 많이 듭니다. 고성능 서버로 갈수록 가격이 올라가게 마련입니다. 수평적 확장 샤딩(sharding).. 2021. 9. 10.