Web/Spring 13

김영한 Spring 핵심 원리 - 기본편 #7

#7 의존관계 자동 주입 7.1 다양한 의존관계 주입 방법 - 생성자 주입 - 수정자 주입(setter 주입) - 필드 주입 - 일반 메서드 주입 src/main/java/hello.core/order/OrderServiceImpl > 생성자 주입 - 이름 그대로 생성자를 통해서 의존 관계를 주입 받는 방법 - 지금까지 우리가 진행했던 방법 - 생성자 호출시점에 딱 1번만 호출되는 것이 보장 - "불변, 필수" 의존관계에 사용 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPoli..

Web/Spring 2023.05.22

김영한 Spring 핵심 원리 - 기본편 #6

#6 컴포넌트 스캔 6.1 컴포넌트 스캔과 의존관계 자동 주입 시작하기 - 지금까지 스프링 빈을 등록한 방법: 자바 코드의 @Bean이나 XML을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열 - 등록해야 할 스프링 빈이 수십, 수백개가 되면 일일이 등록하기도 귀찮고, 설정 정보도 커지고, 누락하는 문제가 발생 > 스프링이 제공하는 기능 - 컴포넌트 스캔: 설정 정보가 없어도 자동으로 스프링 빈을 등록 - @Autowired: 의존관계 자동 주입 > 컴포넌트 스캔과 의존관계 자동 주입 src/main/java/hello.core AutoAppConfig 자바클래스 생성 후 아래 코드 작성 package hello.core; import org.spr..

Web/Spring 2023.05.22

김영한 Spring 핵심 원리 - 기본편 #5

#5 싱글톤 컨테이너 5.1 웹 어플리케이션과 싱글톤 - 스프링은 기업용 온라인 서비스 기술을 지원하기 위해 탄생 - 대부분의 스프링 애플리케이션은 웹 애플리케이션이다. (웹이 아니어도 개발 가능) - 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다.*고객이 3번 요청 → 객체 3개 생성 > 스프링 없는 순수한 DI 컨테이너 테스트 src/test/java/hello.coresingleton 패키지 생성 → SingletonTest 자바 클래스 생성 후 아래 코드 작성package hello.core.singleton; import hello.core.AppConfig; import hello.core.member.MemberService; import org.jun..

Web/Spring 2023.05.15

김영한 Spring 핵심 원리 - 기본편 #4

#4 스프링 컨테이너와 스프링 빈 4.1 스프링 컨테이너 생성//스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); : 스프링 프레임워크의 핵심 컴포넌트 - ApplicationContext: 스프링 컨테이너, 인터페이스 - 스프링 컨테이너는 XML을 기반으로 만들 수 있고(잘 사용x), 애노테이션 기반의 자바 설정 클래스로 만들 수 있다. - 기존의 AppConfig를 사용했던 방식: 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것 - ApplicationContext 인터페이스의 구현체: new..

Web/Spring 2023.05.14

김영한 Spring 핵심 원리 - 기본편 #3

#3 스프링 핵심 원리 이해 2 - 객체 지향 원리 적용 3.1 새로운 할인 정책 개발 서비스 오픈 직전에 할인 정책을 고정 금액 할인이 아니라 좀 더 합리적인 주문 금액당 할인하는 정률% 할인으로 변경 예) VIP가 10000원을 주문하든 20000원을 주문하든 항상 1000원을 할인 → 10%로 지정해두면 고객이 10000원 주문시 1000원을 할인해주고, 20000원 주문시에 2000원을 할인 > RateDiscountPolicy 코드 추가 src/main/java/hello.core/discount RateDiscountPolicy 자바 클래스 생성 후 아래 코드 작성 package hello.core.discount; import hello.core.me..

Web/Spring 2023.05.11

김영한 Spring 핵심 원리 - 기본편 #1

#1 객체 지향 설계와 스프링 1.1 스프링이란? 스프링은 여러 기술의 모음! > 필수 - 스프링 프레임워크: 스프링의 핵심 - 스프링 부트: 여러 기술을 편리하게 사용 > 선택 - 스프링 데이터: 스프링 데이터 JPA 가장 많이 사용 - 스프링 세션 - 스프링 시큐리티 - 스프링 Rest Docs: API 문서 편리하게 사용 - 스프링 배치 - 스프링 클라우드 - 핵심 기술: 스프링 DI 컨테이너, AOP, 이벤트, 기타 - 웹 기술: 스프링 MVC, 스프링 WebFlux - 데이터 접근 기술: 트랜잭션, JDBC, ORM 지원, XML 지원 - 기술 통합: 캐시, 이메일, 원격접근, 스케줄링 - 테스트: 스프링 기반 테스트 지원 - 언어: 코틀린, 그루비 → 최근에는 스프링 ..

Web/Spring 2023.05.09

김영한 Spring 입문 #7

# 7 AOP - AOP: Aspect Oriented Programming 7.1 AOP가 필요한 상황 - 모든 메소드의 호출 시간을 측정하고 싶다면? - 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) - 회원 가입 시간, 회원 조회 시간을 측정하고 싶다면? 예) 모든 메소드의 호출 시간을 측정해야 한다고 가정. → memberConrtoller, memberService, memberRepository 에 시간 측정 로직을 전부 작성하여야 한다. MemberService 회원 조회 시간 측정 추가 src/main/java/service MemberService에 다음 코드를 추가한다. package hello.hellospring.service..

Web/Spring 2023.05.06

김영한 Spring 입문 #6

# 6 스프링 DB 접근 기술 6.1 H2 데이터베이스 설치 > https://www.h2database.com/html/download-archive.html 1.4.200 버전 다운 테이블 생성 drop table if exists member CASCADE; create table member ( id bigint generated by default as identity, #값을 넣지 않아도 자동으로 id를 채워줌 name varchar(255), primary key (id) ); 테이블 확인 테이블에 값 넣기 insert into member(name) values('spring') insert into member(name) values('spring2') *hello-spring에 sql ..

Web/Spring 2023.05.06

김영한 Spring 입문 #5

#5 회원 관리 예제 - 웹 MVC 개발 - 홈 화면 추가 - 등록 - 조회 5.1 회원 웹 기능 - 홈 화면 추가 src/main/java/controller HomeController 파일을 만들고 다음 코드를 추가한다. package hello.hellospring.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller //스프링이 Controller를 찾은 후 home에 매핑 public class HomeController { @GetMapping("/") public String home() { return "ho..

Web/Spring 2023.05.05