스프링 컨테이너의 생성 과정 생성 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..