스프링 11

토비의 스프링 3장 - 템플릿

템플릿이란? 성질이 다른 코드 중에서 변경이 거의 일어나지 않으며 일정한 패턴으로 유지되는 특성을 가진 부분을 자유롭게 변경되는 성질을 가진 부분으로부터 독립시켜서 활용할 수 있도록 하는 방법이다. 다시 보는 초난감 DAO DB 커넥션처럼 제한적인 리소스를 공유해 사용하는 서버에서 동작하는 JDBC 코드는 예외처리가 반드시 필요하다. 예외가 발생하더라도 사용한 리소스를 반환해줘야 하기 때문이다. public void deleteAll() throws SQLException { Connection c = dataSource.getConnection(); PreparedStatement ps = c.prepareStatement("delete from users"); ps.executeUpdate(); ps..

토비의 스프링 2장 - 테스트

현대의 앱이 복잡해져 가며, 테스트의 중요성은 더욱 높아지고 있고, 스프링에서는 테스트를 쉽게 해주는 도구들을 제공한다. 작은 단위의 테스트 한꺼번에 너무 많은 것을 몰아서 테스트하면 테스트 수행 과정도 복잡해지고, 오류가 발생했을 때 정확한 원인을 찾기가 힘들어진다. 따라서 테스트는 작은 단위로 쪼개서 하는 것이 좋다. 여기서 말하는 작은 단위는 어느 정도인지 정해진 것이 아니지만, 일반적으로 단위는 작을수록 좋다. 좋은 테스트의 특징 테스트의 일관성 외부 영향에 상관이 없어야 하고, 반복적으로 테스트를 해도 항상 동일한 결과를 내야 한다. 중복된 데이터로 문제가 일어날 수 있는 경우는 테스트를 수행 후 사용자 정보를 삭제해서 수행하기 이전 상태를 만들어주는 것이다. 포괄적인 테스트 네거티브 테스트 부..

토비의 스프링 1장 - 오브젝트와 의존관계

스프링이 가장 관심을 많이 두는 대상은 오브젝트다. 이 오브젝트를 이해해야 스프링을 이해할 수 있다. 이번 장에서는 오브젝트의 설계와 구현, 동작원리를 알아보자. 초난감 DAO public class UserDao { public void add(User user) throws ClassNotFoundException, SQLException { Class.forName("com.mysql.jdbc.Driver"); Connection c = DriverManager.getConnection("jdbc:mysql://localhost/springbook", "spring", "book"); PreparedStatement ps = c.prepareStatement("insert into users(id,..

스프링 핵심 원리 기본 - 빈 스코프

빈 스코프란 스프링 컨테이너는 컨테이너가 종료될 때까지 스프링 빈을 유지시킨다. 이것은 스프링 빈이 기본적으로 싱클톤 스코프로 생성되기 때문이다. 스코프는 빈이 존재할 수 있는 범위를 말한다. 빈 스코프의 종류 singleton: 스프링 loc 컨테이너당 하나의 인스턴스만 사용. (가장 넓은 범위의 스코프이다.) prototype: 매번 새로운 빈을 정의한다. (빈의 생성과 의존관계 주입까지만 관여하여 스코프의 범위가 매우 짧다) request: HTTP 라이프 사이클 마다 한 개의 빈을 생성 (웹 요청이 들어오고 나갈 때까지 유지) session: HTTP 세션마다 한 개의 빈을 생성 (웹 세션이 생성되고 종료될 때 까지 유지) application: ServeltContext 라이크프사이클 동안 한 ..

스프링 2022.08.02

스프링 핵심 원리 기본 - 빈 생명주기 콜백

빈 생명주기 콜백 애플리케이션 연결을 모두 종료하기 위해서는 객체의 초기화와 종료 작업이 필요하다. 스프링 빈은 객체를 생성하고 의존관계 주입이 끝난 다음에야 필요한 데이터를 사용할 수 있다. 따라서 초기화 작업은 의존관계 주입이 완료되고 난 다음 호출해야 한다. 스프링 컨테이너는 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점과 종료 시점을 알려준다. 콜백이란 어떤 이벤트가 발생했거나 특정 시점에 도달했을 때 시스템에서 호출하는 함수이다. 스프링 빈의 이벤트 라이프사이클 스프링 컨테이너 생성 ⇾ 스프링 빈 생성 ⇾ 의존관계 주입 ⇾ 초기화 콜백 ⇾ 사용 ⇾ 소멸전 콜백 ⇾ 스프링 종료 라이프 사이클을 보면 의존관계 주입후 초기화 콜백 메서드 호출을 하여 초기화 시점을 알려주고,..

스프링 2022.07.28

스프링 핵심 원리 기본 - 의존관계 자동 주입

다양한 의존관계 주입 방법 생성자 주입 이름 그대로 생성자를 통해서 의존 관계를 주입한다. @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; } }..

스프링 2022.07.26

스프링 핵심 원리 기본 - 컴포넌트 스캔

지금까지 스프링 빈을 등록할 때는 자바 코드의 @Bean이나 XML의 으로 직접 등록을 했습니다. 직접 등록하는 방법은 등록해야 할 스프링 빈이 많아지면 설정 정보가 커지고, 누락하는 문제가 발생은 데 이 문제를 해결하고자 스프링에서는 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔을 제공해준다. 컴포넌트 스캔(Component Scan) 컴포넌트 스캔이란 빈으로 등록될 준비를 마친 클래스들을 스캔하여, 빈으로 자동 등록해주는 것이다. @Component, @Configuration, @Service, @Repository, @Controller 등의 어노테이션은 전부 컴포넌트 스캔 대상이 된다. (소스 코드를 열어보면 @Component 어노테이션이 붙어있기 때문이다.) 컴포넌트 스캔 ..

스프링 2022.07.22

스프링 핵심 원리 기본 - 싱글톤 컨테이너

스프링으로 개발하지 않고 순수 자바로 개발한다고 합시다. 고객 요청이 들어올 때마다 새로운 객체를 생성하고 객체가 쌓이고 쌓이다 보면 트래픽이 감당이 안 되는 상황이 올 것이다. 그렇다면 어떻게 해결해야 할까? 이미 존재하고 있는 객체를 조회해서 사용하면 객체를 계속해서 만들 필요도 없고 트래픽 문제도 해결이 될 것입니다. 싱글톤 패턴 싱글톤 패턴은 클래스의 객체를 딱 1개만 생성하고 공유할 수 있게 해주는 디자인 패턴입니다. 싱글톤 패턴 구현 public class SingletonService { private static final SingletonService instance = new SingletonService(); public static SingletonService getInstance..

스프링 2022.07.19

스프링 핵심 원리 기본 - 스프링 컨테이너와 스프링 빈

이번에는 저번에 하던걸 이어서 스프링을 AppConfig에 적용시켜 보겠습니다. 스프링 컨테이너 생성 과정 1. 스프링 컨테이너 생성 스프링 컨테이너 : 스프링 컨테이너는 스프링 빈의 생명 주기를 관리하며, 생성된 스프링 빈들에게 추가적인 기능을 제공하는 역할을 한다. 제어 흐름을 외부에서 관리 하고 객체들 간의 의존 관계를 스프링 컨테이너가 런타임 과정에서 알아서 만들어 준다. ApplicationContext를 스프링 컨테이너라고 한다. 스프링 컨테이너를 생성할 때는 구성 정보(AppConfig.clss)를 지정해주어야 한다. 2. 스프링 빈 등록 @Configuration public class AppConfig { @Bean public MemberService memberService() { r..

스프링 2022.07.18