728x90 JAVA & SPRING/Spring 핵심원리-기본8 스프링 핵심 원리 - 7일차(빈 스코프) 빈 스코프의 뜻은 빈의 존재할 수 있는 범위를 말한다. 스프링에서 지원하는 스코프 싱글톤 -> 스프링 컨테이너 시작부터 종료까지 유지됨, 가장 넓은 스코프 (항상 같은 인스턴스의 스프링 빈을 반환함) 프로토타입 -> 빈의 생성과 의존관계 주입까지만 관리 그 이후는 관리 안하는 스코프(만약 클라이언트가 달라고 하면 스프링 빈을 생성해서 던져주고 그 이후는 관리 안한다고 보면 됨 그래서 @PreDestory 호출이 안됨) 웹 관련 스코프 request: 웹 요청이 들어오고 나갈때까지 유지되는 스코프 session: 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프 application : 웹 서블릿 컨텍스트(?)와 같은 범위 유지되는 스코프 빈 스코프는 @Scope("") 이렇게 해서 지정이 가능함 싱글톤.. 2023. 8. 2. 스프링 핵심 원리 - 6일차 (의존관계 자동 주입) 의존관계 주입에는 크게 4가지가 존재한다 1. 생성자 주입 -> 지금까지 햇던걸로 생성자를 호출할때 주입하는 것이며, 1번만 호출한다는 것이 보장되고 세팅 한번 이후에는 이후 세팅을 못하게 할 수 있다. (좋은 아키텍처는 적절한 제약이 있어야한다.) 또한 생성자 주입시 private final로 사용해야한다. 생성자가 1개만 있으면 @Autowired 생략해도 자동 주입 됨 2. 수정자 주입 -> setter라 불리는 필드의 값을 변경하는 메서드를 통해 의존관계를 주입하는 방식 스프링 컨테이너에 2가지 라이프 사이클이 있는데 빈을 등록하는 것과 의존관계를 등록하는 라이프 사이클이 있다. 생성자 주입은 빈을 등록하면서 동시에 의존관계 주입도 같이 일어나는데 setter는 빈을 등록하고 난 후 의존관계 주입.. 2023. 7. 30. 스프링 핵심 원리 - 5일차 (컴포넌트 스캔) 여태까지 우리는 스프링 컨테이너에 스프링 빈을 등록할때 @Bean이나 xml(지금은 거의 안씀)을 활용해서 등록을 했는데 이번에는 자동으로 빈을 등록해주는 컴포넌트에 대해 알아본다. hello.core 패키지에 AutoAppConfig 클래스를 만든다. package hello.core; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.FilterType; @Configuration // 설정정보 // 자동으로 스프링 빈 등록 @ComponentScan( .. 2023. 7. 29. 스프링 핵심 원리 - 4일차(싱글톤 컨테이너) 스프링은 애플리케이션 지원을 한다.(백엔드 기술에 쓰이는 것처럼 태생이 그렇다) 위 그림처럼 많은 사람들이 서버에 요청을 보내면 요청보낼때마다 객체가 생성되야 한다. 이것을 직접 확인해보자 package hello.core.singleton; import hello.core.AppConfig; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.conte.. 2023. 7. 28. 스프링 핵심 원리-3일차(AppConfig로 OCP, DIP 원칙 준수) 이제 순수자바로 개발했을때 문제점과 해결방안 그리고 이것을 스프링으로 변환하는 과정을 할것이다. 이제 기획자가 할인을 1000원이 아닌 10% 할인으로 바꿨다고 한다. 할인정책을 바꾸는 과정을 진행해보자 discount 패키지에 RateDiscountPolicy 라는 클래스를 만든다. package hello.core.discount; import hello.core.member.Grade; import hello.core.member.Member; public class RateDiscountPolicy implements DiscountPolicy{ private int discountPercent = 10; @Override public int discount(Member member, int pr.. 2023. 7. 26. 스프링 핵심 원리 기본편-2일차(스프링 핵심원리 이해1 - 주문 & 할인 도메인) 회원 도메인을 만들었으니 이제 주문과 할인 도메인을 설계하고 개발할 것이다. 그전 글과 이번 도메인을 다 합치면 이와 같은 설계를 그릴 수 있다. 이제 할인정책을 개발해보자 hello.core에 discount 패키지를 만들고, DiscountPolicy 인터페이스를 만든다. package hello.core.discount; import hello.core.member.Member; public interface DiscountPolicy { /* * @return 할인 대상 금액 */ int discount(Member member, int price); } 그후 이 인터페이스를 상속받는 FixDiscountPolicy 클래스를 만든다. package hello.core.discount; import.. 2023. 7. 24. 스프링 핵심 원리 기본편-2일차(스프링 핵심원리 이해1 - 회원 도메인) 이번에는 스프링을 최대한 안쓰면서 개발을 진행했다. 일단 버전은 Java11에 2.7.14 버전으로 스프링을 generate를 했다. 다른 dependencies는 아무것도 설정하지 않았다. 비지니스 요구사항은 아직 DB나 할인 정책은 미확정이므로 인터페이스를 만들고 구현체를 바꿔낄 수 있게 끔 개발을 진행한다. 일단 hello.core에 member라는 패키지를 만든다. 패키지안에 Grade 이름으로 Enum 클래스를만든다. (Enum클래스를 이용해서 해당 클래스 내에 있는 값만 값을 들어오게할수있다.) package hello.core.member; public enum Grade { // 열거형 클래스 BASIC, VIP } // BASIC, VIP 라는 값만 들어올 수 있음 그 후 Member라는.. 2023. 7. 24. 스프링 핵심 원리 기본편 - 1일차(스프링 이론, 스프링은 왜 만들어졌을까) 일단 스프링의 역사에 대해 완전 간략하게 적어보면 스프링이 존재하기 고대에는 EJB라는 기술이 있었는데 이 기술이 흔히 말하는 "답도없는" 이런 기술이었다. 그래서 로드 존슨이 EJB의 문제점을 지적하면서 책을 만들었는데 이게 스프링의 초판이됨. 또 Gavin king이 하이버네이트를 만듬(JPA 쓸때 필요했던 그 라이브러리) 하이버네이트는 ORM 기능이다. 스프링은 전통적인 J2EE(EJB)라는 겨울을 넘어 새로운 시작이라는 뜻으로 지어졌다. (생각할수록 고대 개발자들은 대단..) 스프링에는 많은 기술들이있다. 스프링 부트,스프링 데이터, 스프링 세션, 스프링 시큐리티, 스프링 rest docs, 스프링 배치, 스프링 클라우드, 등등 많은 기술들이 있다. 스프링 부트는 스프링을 편리하게 사용할 수 있는.. 2023. 7. 24. 이전 1 다음 728x90