스프링 핵심원리6 스프링 핵심원리( 심화 ) - 로그 추적기와 디자인패턴( 전략 패턴 ) 앞서 로그 추적기를 개발하면서 템플릿 메서드 패턴을 적용하여로그 추적기 기능 관련 코드가 중복되는 현상을 상속과 오버라이딩을 사용하는 템플릿 메서드 패던을 적용하여 개선하였다. 하지만, 상속을 통한 해결에는 결합도가 높아지고, 단일 상속의 한계가 존재하는 등의 상황이 후에 도출될 수 있다. 따라서 상속보단 조합의 방향성을 가지고 서비스 로직마다 변하는 부분과 변하지 않는 부분( 로그 추적기 )을 분리하여 개선하는 방법으로 전략 패턴을 적용해보자. 전략 패턴 적용 전략 패턴은 템플릿 메서드 패턴과 비슷한 역할을 하면서 상속의 단점을 제거할 수 있는 디자인 패턴이다.그 구체적인 방법은 상속이 아닌 위임(조합)을 사용하는 것이다. 템플릿 메서드 패턴의 구조와 전략 패턴의 구조를 비교하여 이해해보자.먼저, 템플.. Spring/SpringCore - advance 2025. 3. 16. 스프링 핵심원리( 심화 ) - 로그 추적기와 동시성( 로그 추적기 개발 ) 로그 추적기의 필요성서비스가 점차 거대해지고 사용되는 소스 코드와 클래스가 수 십만 라인에 수 백개 이상이 존재한다면, 점차적으로 운영 환경에서의 모니터링과 운영이 중요해진다. 특히 성능적인 이슈와 관련하여 병목과 같은 현상에서 병목의 발생 지점을 파악하거나 예외 발생 지점 등을 파악하는 것이 필요해진다. 그리고 이러한 지점들을 로그로 남기는 것이 어플리케이션의 실행과 운영에서 상태 파악과 많은 문제들에 대한 힌트를 제공할 수 있기에 중요한 부분이다. 따라서 로그 추적기를 개발하면서 다음과 같은 요구 사항들을 구현해보자.요구사항 ✅ 모든 PUBLIC 메서드의 호출과 응답 정보를 로그로 출력 ✅ 애플리케이션의 흐름을 변경하면 안됨 로그를 남긴다고 해서 비즈니스 로직의 동작에 영향을 주면 안됨 ✅ 메서.. Spring/SpringCore - advance 2025. 2. 14. 스프링 핵심 원리 - 빈 스코프와 웹 스코프( Provider와 Proxy 활용 지연처리 ) Bean Scope지금까지 배운 스프링과 관련한 핵심 원리의 Main은 스프링 컨테이너와 Bean에 대한 이해 및 원리였다.그리고 스프링 Bean은 컨테이너의 시작과 함께 등록되어 컨테이너 종료 시점까지 유지됨을 봤다. 하지만 이는 무조건적인 사항이 아니다.Bean 생성과 소멸에 대한 적용의 범위가 존재하며, 이를 사용하여 개발에 적용할 수 있다.이것을 Bean Scope라고 부른다. Bean Scope는 다음과 같이 지정할 수 있다. 프로토타입 스코프 Bean 컴포넌트 스캔 자동 등록@Scope("prototype")@Componentpublic class HelloBean {} 수동 등록@Scope("prototype")@BeanPrototypeBean HelloBean() { return new .. Spring/SpringCore - basic 2025. 1. 14. 스프링 핵심 원리 - ComponentScan의 자동 빈 등록과 빈 탐색 관련 옵션, 빈 중복에 의한 충돌에 대한 고려 Repeat is the best medicine for memory 앞서 스프링에 의한 의존관계 주입에 있어서, @Configuration과 @Bean의 개념과 활용법에 대해서 알아보았다. 그런데, 스프링을 통한 객체들을 관리받기 위해서 모든 클래스에 @Configuration과 @Bean을 붙이는 점을 상상해보면 번거로움과 누락에 의한 문제가 발생할 것이라고 예상할 수 있다. 또 단순 반복적인 작업은 너무나 귀찮다.. 스프링은 역시나 이러한 번거로움을 해결하기 위해서 자동으로 Bean을 등록해주는 ComponentScan이라는 기능을 제공한다.( + @Autowired ) ComponentScan 자동 빈 등록 ComponentScan이 어떤 방법으로 자동 Bean 등록을 도와주는 지 확인해보자... Spring/SpringCore - basic 2024. 12. 30. 스프링 핵심 원리 - 스프링으로 전환 Repeat is the best medicine for memory 제어의 역전(Ioc)과 의존관계 주입(DI) 앞서 순수 자바코드로 진행한 예제를 통해 스프링이 하는 역할에 대해 파악하고 이해하는 과정을 정리하였다. 스프링은 좋은 객체 지향적 설계와 구현을 도와주는 도구이다. 구체적으로는 필요한 구현체를 생성하고 연결해주는 역할을 담당하여 프로그램에 대한 제어 흐름 권한을 AppConfig가 가져갔다. 따라서 해당 객체를 필요로하는 객체( 클라이언트 )는 더 이상 구현체가 아닌 추상체에 의존하면서 실행에 필요한 로직만 수행하게 되었다. 이처럼 프로그램에 있어 제어의 흐름( ex, 클라이언트가 필요한 객체를 직접 호출 ) 직접 관리하는 것이 아닌 외부에서 관리하는 것을 제어의 역전(IoC)으로 부른다.. Spring/SpringCore - basic 2024. 11. 13. 스프링 핵심 원리 - 예제를 통해 이해하는 스프링의 핵심 원리 Repeat is the best medicine for memory스프링 기술에 대한 이야기를 하면 항상 다루는 것이 객체 지향적 코드를 지원해준다는 점이다. 결론적으로 말하자면, 스프링은 다형성과 OCP, DIP를 쉽게 사용할 수 있도록 도와준다. 이를 DI 컨테이너를 제공하여 가능하도록 만들었는데, 이는 의존성 주입으로 클라이언트 측의 코드 변경 없이도 기능의 사용이 가능하도록 지원해주는 방법이다.따라서 쉽게 부품을 교체하듯이 필요한 기능의 구현체에 직접적으로 의존하지 않으면서 개발이 가능하도록 스프링은 지원해준다. 객체 지향의 원칙을 지키면서 개발을 진행하다보면, 결국 스프링과 같은 프레임워크를 만들게 된다.그러나, 이렇게 말하면 무슨 의미인지 와닿지 않기에 직접 코드를 통해서 파악하며 스프링이.. Spring/SpringCore - basic 2024. 11. 7. 이전 1 다음