본문 바로가기

전체 글156

6. 컴포넌트 스캔 1. 스프링 빈 등록, AppConfig의 변화 지금까지 스프링 빈 등록은 AppConfig.class 에서의 @Bean / XML 에서의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열했다. 그러나, 이와 같은 설정 정보 없이도 스프링에서 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능을 제공한다. basePackages : 탐색할 패키지의 시작 위치를 지정한다. 이 패키지를 포함해서 하위 패키지를 모두 탐색한다. basePackageClasses : 지정한 클래스의 패키지를 탐색 시작 위치로 지정한다. - 만약 지정하지 않으면 @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작 위치가 된다. 권장하는 방법 - 패키지 위치를 지정하지 않고, 설정 정보 클래스의 위치를 프로젝트 .. 2023. 8. 4.
5. 싱글톤 컨테이너 1. 싱글톤 패턴 1) 정의 - 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 - 따라서, 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다. 2) 문제점 - 싱글톤 패턴을 구현하는 코드 자체가 많이 들어간다. → 적용할 모든 클래스를, 위와 같은 형식으로 만들어야 한다. - 의존관계상 클라이언트가 구체 클래스에 의존한다. → new() 할 때, 각 구체 클래스로 만듦 → DIP·OCP 위반 - 테스트하기 어렵다. - private 생성자로 자식 클래스를 만들기 어렵다. → 상속을 통한 새로운 동작을 추가 및 변경이 어려움 - 결론적으로, 유연성이 떨어진다. → 언제나 동일한 객체를 사용해야 하기 때문에 다른 구현을 하는 것이 어려움 2. 스프링에서의 해결방법 (Annotati.. 2023. 8. 4.
4. 스프링 컨테이너와 스프링 빈 1. 스프링 컨테이너 생성 1) 개념 - ApplicationContext 를 "스프링 컨테이너" 라 한다. - ApplicationContext 는 인터페이스다. - 스프링 컨테이너는 XML 기반으로도 (new GenericXmlApplicationContext("appConfig.xml")), 애노테이션 기반의 자바 설정 클래스 (new AnnotationConfigApplicationContext(AppConfig.class))로 만들 수 있다. * 정확히는 스프링 컨테이너를 BeanFactory, ApplicationContext로 구분하지만, BeanFactory를 직접 사용하는 경우는 거의 없으므로 일반적으로 ApplicationContext를 스프링 컨테이너라 한다. 2) 내부 동작 - Ap.. 2023. 8. 3.
3. 스프링 핵심 원리 이해2 - 객체 지향 원리 적용 1. 기존 설계 문제점 - 문제점 위 자료를 보자. 정책을 변경하려면 클라이언트인 OrderServiceImpl 코드를 변경해야 한다. 이는 다형성을 활용하여, 역할(interface)과 구현(class)을 분리했지만 - OCP(: 변경하지 않고 확장이 가능하다)를 위반하는 것을 확인할 수 있다. - 또한 인터페이스뿐만 아니라 구체 클래스에도 의존하고 있다. DIP(: 구체화가 아닌, 추상화에 의존해야한다.) 위반 - 해결방안 인터페이스에만 의존하도록 코드를 변경해야한다. 즉, 클라이언트인 OrderServiceImpl에 구현 객체를 대신 생성하고 주입해주어야 한다. AppConfig : 애플리케이션의 전체 동작 방식을 구성(config)하기 위해, 구현 객체를 생성하고 생성자를 통해서 연결하는 책임을 .. 2023. 7. 21.
2. 스프링 핵심 원리 이해1 - 예제 만들기 1. 회원 도메인 설계 - Service : 핵심 비즈니스 로직 구현 - MemberService 로 '회원가입' 및 '회원 조회' 기능 추상화 - MemberServiceImpl 에서 구체화 - MemberRepository 에 의존함, 그러나 구체 클래스에도 의존하고 있음 (DIP 위반) - Repository : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 - MemberRepository 로 데이터베이스에 '회원 저장' 및 'Id 회원 찾기' 기능 추상화 - 어떤 데이터베이스를 사용할 지 정해지지 않음 (자체 DB / 외부 시스템 연동) 2. 주문과 할인 도메인 설계 위의 강의자료처럼 역할과 구현을 분리해서 자유롭게 구현 객체를 조립할 수 있게 설계해야 한다. 덕분에 회원 저장소와 할.. 2023. 7. 20.
1. 객체지향 설계와 스프링 Q. EJB(Enterprise Java Beans) 란? 개념 ▶ 기업 환경에서 사용되는 분산 컴포넌트 아키텍처를 위한 표준 Java 기술 장점 1. 분산 애플리케이션 개발을 위한 기본 구조를 제공한다. 2. 트랜잭션 관리와 보안 : 트랜잭션 관리와 보안을 자동으로 처리하여, 개발자가 직접 구현할 필요가 없다. 단점 1. 복잡한 모델을 가지고 있어, 설정 및 배포 작업에 시간이 걸린다. 2. 순수 객체지향적이지 않다. (Session Bean, Entity Bean) 3. 컨테이너 환경 없이 단위 테스트하기 어려움 * 복잡성과 기술적 제약으로 개발 생산성과 유연성이 감소된다. Q. Spring 이란? 개념 ▶ Java를 기반으로 하는 기업용 애플리케이션 개발을 위한 경량급 프레임워크 등장 배경 - 기존.. 2023. 7. 18.