
컴포넌트 스캔과 의존관계 자동 주입 이전까지 스프링 빈을 등록하려 했다 - @Bean을 통해 설정 정보에 직접 등록 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 @ComponentScan 기능을 제공한다. 컴포넌트 스캔은 @Component이 붙은 클래스를 스캔해서 스프링 빈으로 등록한다. +) @Configuration이 붙은 설정 정보도 자동 등록이 됨, 충돌을 조심하자 단, 스프링 빈 이름은 클래스 이름의 첫 문자를 소문자로 변경하여 사용한다. ( AddPrice -> addPrice ) 또한, 의존관계를 자동으로 주입해주는 @Autowired 기능도 제공한다. 디폴트는 스프링 컨테이너가 타입이 같은 빈을 찾아서 주입한다. 컴포넌트 스캔의 탐색 위치와 기본 스캔 대상 컴포넌트 스캔의 ..

웹 애플리케이션과 싱글톤 웹 애플리케이션은 보통 여러 고객이 동시 요청을 요구함 -> 요청마다 객체를 생성해야 함 -> 좋지 않은 방법.. 해결 방안? - 해당 객체를 1개만 생성하고, 생성된 객체를 공유하도록 설계한다. ==> 싱글톤 패턴 싱글톤 패턴( Singleton Pattern ) 클래스의 인스턴스가 1개만 생성되는 것을 보장하는 디자인 패턴 어떻게 보장? - private 생성자를 사용해 외부에서 임의로 new 키워드 사용하지 못하게 하여 보장 위의 코드는 객체를 미리 생성해두는 단순하고 안전한 방법, 다른 여러 싱글톤 패턴도 존재한다. 장점만 존재하는가? 문제점은? 싱글톤 패턴을 구현하기 위한 코드가 많이 들어간다. 의존관계상 클라이언트가 구체 클래스에 의존한다. - DIP위반 클라이언트가 ..

스프링 컨테이너의 생성 과정 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext를 스프링 컨테이너라 함, 이는 인터페이스다. 스프링 빈 등록 스프링 빈 저장소에 @Bean이 붙은 메서드를 이름으로, 객체를 빈 객체로 저장해준다. 빈 이름을 직접 부여 가능하며 -> @Bean( name = " ~ " ) 빈 이름은 항상 다른 이름을 부여해야 한다. 이후에 스프링 빈 의존관계 설정을 준비하고 주입해준다. +) 빈을 알고싶다. 모든 빈 출력하기 applicationContext.getBeanDefinitionNames() -> 스프링에 등록된 모든 빈..

관심사의 분리 애플리케이션을 하나의 공연이라고 생각하자. 1. 각각의 인터페이스를 배우 역할(로미오, 줄리엣 ... )이라고 설정 2. 배우는 배역에만 집중해야만 한다. 3. 배우를 섭외하고, 역할에 맞는 배우를 지정하는 것은 별도의 공연 기획자가 있어야 하는 것이다. 인터페이스(배역), 구현체(배우), 그리고 이를 담당하는 AppConfig(공연 기획자) AppConfig 이를 통해 구현체에 의존하지 않고, 인터페이스에만 의존할 수 있게 된다. IoC( Inversion of Control ) 제어의 역전, 제어권이 뒤바뀐 것을 의미한다. 기존에는 클라이언트 구현 객체가 프로그램의 제어 흐름을 스스로 조종했다. 반면, AppConfig를 사용하면서 구현 객체는 자신의 로직을 실행하기만 하고 프로그램의 ..

스프링의 탄생 기존의 자바 표준 기술인 EJB(Enterprise Java Beans) -> 이론적으로 좋았지만 어렵고 느렸던... Rod Johnson이 책을 출간한 후 오픈소스 프로젝트를 진행하게 된다. EJB라는 겨울을 넘어 새로운 시작이라는 뜻로 spring, 봄이라 지었다. 스프링 스프링 프레임워크 핵심 기술 : 스프링 DI 컨테이너, AOP, 이벤트 웹 기술 : 스프링 MVC, 스프링 WebFlux 데이터 접근 기술 : 트랜잭션, JDBC, ORM 지원, XML 지원 .... 스프링 부트 - 스프링을 편리하게 사용할 수 있도록 지원, 최근은 Default Tomcat 같은 웹 서버를 내장하여 별도의 웹 서버가 필요하지 않기에 단독으로 스프링 애플리케이션 생성 가능 starter 종속성 제공 (..

JDBC( Java DataBase Connectivity ) 자바에서 데이터베이스에 접근할 수 있도록 하는 API ( DBMS와 애플리케이션의 매개체 ) 이전의 인터페이스 구현 클래스를 기존 코드를 손대지 않고 스프링 DI를 통해 변경할 수 있다. ( Open-Closed Principle ) 통합 테스트 테스트 시 @Transactional을 적용해보자 이전 테스트 시 메모리를 초기화 할 때 사용한 @AfterEach와 같은 맥락, DB를 커밋하기 전 삭제(롤백)하는 역할을 해준다. 스프링 JDBCTemplate JDBC API에서 반복되는 코드를 제거해준다. 단, sql은 직접 작성해야 함 JPA( Java Persistance API ) ORM( Object-Relational Mapping ) ..

회원 관리 예제 만들어보기 컨트롤러 : 웹 MVCdml 컨트롤러 역할 리포지토리 : DB에 접근, 도메인 객체를 DB에 저장 서비스 : 핵심 비즈니스 로직 구현 도메인 : 비즈니스 도메인 객체(회원, 주문 등 ..), DB에 저장됨 테스트케이스 - main메서드 실행하거나, 컨트롤러를 통해 해당 기능을 실행하여 검증하기는 오래걸리고 반복이 어렵다. JUnit 프레임워크를 통해 이를 해결할 수 있다. 짧게 배운 테스트 해보기 Test 패키지에 테스트하려는 대상Test 클래스 생성 후 @Test를 사용한다. (Test라는 것을 알려줌) 테스트는 순서가 랜덤, 각 테스트들끼리는 의존적이지 않아야 한다. 각 테스트가 끝난 후 테스트에 사용한 객체를 초기화 해줘야 한다. (보통 @AfterEach를 사용한다고 한..

스프링 프레임워크(Spring Framework) - 자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크 장점 - 경량 컨테이너, IoC(Invertion of Control 제어역행) DI(Dependency Injection 의존성 주입), AOP(Aspect-Oriented Programming 관점 지향 프로그래밍) 스프링 부트(Spring Boot) - 스프링 프레임워크 기반의 애플리케이션 ( 경량화, 더 잘 사용할 수 있는 스프링 ) 장점 - Dependency의 관리가 쉽다. Embedded server - Tomcat이 내장되어 서버 구동 시간이 짧다. 내장 서블릿 컨테이너로 Jar 파일로 간단 배포가 가능 라이브러리 Gradle은 의존 관계가 있는 라이브러리들을 함께 다운로드해준다. In..