BeanDefinition (인프런) 김영한님의 스프링 핵심 원리-기본편을 공부하고 리뷰한 글입니다. 8. 스프링 빈 설정 메타 정보(BeanDefinition) Q. 스프링이 다양한 설정 형식을 지원할 수 있는 이유는? 그 중심에는 바로 BeanDefinition이라는 추상화가 있다. 즉, 설정 정보의 역할과 구현을 개념적으로 분리한 것으로 설정 정보를 추상화시켰다. 스프링 컨테이너는 BeanDefinition(역할)만 알고 자바 코드인지, XML 인지(구현)은 몰라도 된다. XML 을 읽어 BeanDefinition 만듦 자바 코드를 읽어 BeanDefinition 만듦 ● BeanDefinition = 빈 설정 메타정보 - @Bean / 하나당 하나씩 메타 정보가 생성된다. - 스프링 컨테이너는 이..
(인프런) 김영한님의 스프링 핵심 원리-기본편을 공부하고 리뷰한 글입니다. 5. 새로운 구조와 할인 정책 적용 정액 할인 정책을 정률 할인 정책으로 변경한다. FixDiscountPolicy → RateDiscountPolicy AppConfig의 등장으로 애플리케이션이 크게 사용 영역 & 객체를 생성하고 구성하는 영역으로 분리되었다! 1. 그림 - 사용, 구성의 분리 2. 그림 - 할인 정책의 변경(중요!) FixDiscountPolicy → RateDiscountPolicy 로 변경해도 구성 영역만 영향O, 사용 영역은 영향X 3. 할인 정책 변경 구성 코드 public class AppConfig { // MemberService 역할(생성자 주입) public MemberService member..
(인프런) 김영한님의 스프링 핵심 원리-기본편을 공부하고 리뷰한 글입니다. 1. 새로운 할인 정책 개발 1. 새로운 할인 정책을 확장해보자 2. RateDiscountPolicy 추가 주문한 금액의 %를 할인해주는 새로운 정률 할인 정책을 추가하자. static import 3. RateDiscountPolicy 코드 추가 DiscountPolicy 를 구현한 정률 할인 정책 클래스를 만든다. package hello.core.discount; import hello.core.member.Grade; import hello.core.member.Member; public class RateDiscountPolicy implements DiscountPolicy{ private int discountPer..
(인프런) 김영한님의 스프링 핵심 원리-기본편을 공부하고 리뷰한 글입니다. 1. 주문과 할인 도메인 설계 - 1. 주문 도메인 협력, 역할, 책임 1) 주문 생성: 클라이언트는 주문 서비스에 주문 생성을 요청한다. - 실무에서는 상품이라는 객체를 만들어서 구현하지만 여기서는 간단하게 구현하기 위해 데이터(회원 id, 상품명, 상품가격)로 보낸다. 2) 회원 조회: 할인을 위해서 회원 등급이 필요하다. 그래서 주문 서비스는 회원 저장소에서 회원을 조회한다. (회원의 등급을 알기 위해서) 3) 할인 적용: 주문 서비스는 회원 등급에 따른 할인 여부를 할인 정책에 위임한다. 4) 주문 결과 반환: 주문 서비스는 할인 결과를 포함한 주문 결과를 반환한다. (참고) 실제로는 주문 데이터를 DB에 저장하지만 여기서..
(인프런) 김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술을 공부하고 리뷰한 글입니다. 1. AOP 적용 AOP: Aspect Oriented Programming 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) 분리 1. 시간 측정 AOP 등록 package hello.hellospring.aop; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component..
(인프런) 김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술을 공부하고 리뷰한 글입니다. 1. AOP가 필요한 상황 1) 모든 메소드의 호출 시간을 측정하고 싶을 때 2) 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) 3) 회원 가입 시간, 전체 회원 조회 시간을 측정하고 싶을 때 1. MemberService 회원 조회 시간 측정 추가 @Transactional public class MemberService { ... /** * 회원 가입 */ public Long join(Member member) { long start = System.currentTimeMillis(); // 회원가입 시작 시각 try {..
(인프런) 김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술을 공부하고 리뷰한 글입니다. 스프링 DB 접근 기술 4가지 방식대로 차례로 진행할 예정이다. 1. 순수 JDBC 2. JDBCTemplate 3. JPA 4. 스프링 데이터 JPA 1. JPA 장점 1. 기존의 반복 코드는 물론이고, 기본적인 SQL도 JPA가 직접 만들어서 실행해준다. 2. SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환을 할 수 있다. 3. 개발 생산성을 크게 높일 수 있다. 2. JPA를 이용한 코드 작성 1. build.gradle 파일에 JPA, h2 데이터베이스 관련 라이브러리 추가 jdbc를 사용하지 않으므로 아래와 같이 주석 처리하거나 삭제하고 jpa 관련 라이..
(인프런) 김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술을 공부하고 리뷰한 글입니다. 스프링 DB 접근 기술 4가지 방식대로 차례로 진행할 예정이다. 1. 순수 JDBC 2. JDBCTemplate 3. JPA 4. 스프링 데이터 JPA 1. 스프링 JdbcTemplate 회원 리포지토리 1) repository 패키지에 JdbcTemplateMemberRepository 클래스 생성 2) JdbcTemplateMemberRepository 코드 작성 1. 생성자(Constructor) public class JdbcTemplateMemberRepository implements MemberRepository{ private final JdbcTemplate jdbc..