Spring-Boot
-
Spring 핵심 원리 기본편 - 8. 빈 생명주기 콜백Spring-Boot/스프링핵심원리 - 기본편 2022. 5. 31. 08:36
빈 생명주기 콜백 시작 - 데이터 베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다 - 스프링 빈은 간단하게 라이프사이클을 가진다 ( 생성자 주입은 예외 → 생성자주입은 객체를 만들때 의존관계 주입! ) *객체생성* → *의존관계 주입* - 스프링 빈은 객체를 생성하고, 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료 - 그럼 개발자가 의존관계 주입이 모두 완료된 시점을 어떻게 할 수 있을까? * 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공 * 한다. 또한 * ..
-
Spring 핵심 원리 기본편 - 7. 의존관계 자동 주입Spring-Boot/스프링핵심원리 - 기본편 2022. 5. 30. 11:14
다양한 의존 관계주입 방법 의존관계 주입은 크게 4가지 방법이 있다. - 생성자 주입 - 수정자 주입 (setter 주입) - 필드 주입 - 일반 메서드 주입 1. 생성자 주입 - 이름 그대로 생성자를 통해서 의존 관계를 주입 받는 방법 - 특징 ㆍ생성자 호출 시점에 딱 1번만 호출되는 것이 보장 ㆍ*불변, 필수* 의존관계에 사용 불변 : setter메서드를 만들지않고 수정을 불가능하게 만들도록 한다 필수 : 생성자에는 값을 다 채워 넣어야한다 @Component public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository;// final : 값이 존재해야한다. private fin..
-
Spring 핵심 원리 기본편 - 6. 컴포넌트 스캔Spring-Boot/스프링핵심원리 - 기본편 2022. 5. 30. 09:54
컴포넌트 스캔과 의존관계 자동 주입 시작하기 - 지금까지 스프링 빈을 등록할 떄는 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열 - 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공 - 또 의존 관계도 자동 주입하는 @Autowired 라는 기능도 제공 @Configuration @ComponentScan( excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) // 보통 설정 정보는 컴포넌트 스캔 대상에서 제외하지 않는다. ) public class AutoAppConfig { } - 컴포넌트 스..
-
Spring 핵심 원리 기본편 - 5. 싱글톤 컨테이너Spring-Boot/스프링핵심원리 - 기본편 2022. 5. 28. 14:17
웹 애플리케이션과 싱글톤 패턴 - 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생 - 대부분의 스프링 애플리케이션은 웹 애플리케이션, 웹 애플리케이션은 보통 여러 고객이 동시에 요청 - 우리가 만들었던 스프링 없는 순수한 DI 컨테이너인 AppCOnfig는 요청을 할 때마다 객체를 새로 생성한다 - 고객 트래픽이 초당 100이 나오면 초당 100개 객체가 생성되고 소멸된다! → 메모리 낭비가 심하다 - 해결방안은 해당 객체가 딱 1개만 생성되고, 공유하도록 설계하면 된다 → 싱글톤 패턴 싱글톤 패턴 - 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인패턴 - 그래서 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다. ㆍprivate 생성자를 사용해서 외부에서 임의로 ne..
-
Spring 핵심 원리 기본편 - 4. 스프링 컨테이너와 스프링 빈Spring-Boot/스프링핵심원리 - 기본편 2022. 5. 24. 13:43
*스프링 컨테이너* - ApplicationContext를 스프링 컨테이너라 한다. - @Configuration : 애플리케이션의 구성(설정) 정보로 사용 - @Bean : 해당 메서드들을 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다. // 스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); // 스프링 컨테이너에서 빈 가져오기 applicationContext.getBean("memberService", MemberService.class); - 스프링 컨테이너를 통해서 필요한 스프링 빈( 객..
-
Spring 핵심 원리 기본편 - 3. IoC, DI, 그리고 컨테이너Spring-Boot/스프링핵심원리 - 기본편 2022. 5. 24. 13:08
제어의 역전 IoC ( Inversion of Control ) : 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전(IoC)이라 한다. 프레임워크 VS 라이브러리 - 프레임워크는 내가 작성한 코드를 제어하고, 대신 실행하면 그것은 프레임워크가 맞다. ( JUnit ) - 반면에 내가 작성한 코드가 직접 제어의 흐름을 담당한다면 그것은 프레임 워크가 아니라 라이브러리다. 의존관계 주입 DI ( Dependency Injection ) - 의존관계는 *정적인 클래스 의존 관계와, 실행 시점에 결정되는 동적인 객체(인스턴스) 의존관계* 둘을 분리해서 생각해야한다. - *정적인 클래스 의존관계* - 클래스가 사용하는 import 코드만 보고 의존관계를 쉽게 판단할 수 있다...
-
Spring 핵심 원리 기본편 - 2. DIP 와 OCPSpring-Boot/스프링핵심원리 - 기본편 2022. 5. 24. 09:46
DIP 위반 , OCP 위반 public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository = new MemoryMemberRepository(); // private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); private final DiscountPolicy discountPolicy = new RateDiscountPolicy(); } 1. DIP ( 추상화(인터페이스)에 의존해라 ) 위반 : 인터페이스( 추상 )에 의존하고 있지만 구현( 구체 ) 클래스에도 의존하고 있다 2. OCP ( 변경하지 않고 확장 가..
-
Spring 핵심 원리 기본편 - 1. 객체 지향 설계와 스프링Spring-Boot/스프링핵심원리 - 기본편 2022. 5. 23. 14:09
스프링의 핵심가치 - 객체 지향 프로그래밍 스프링 프레임워크 - 핵심기술 : 스프링 DI 컨테이너, AOP, 이벤트, 기타 - 웹기술 : 스프링MVC, 스프링 WebFlux - 데이터 접근기술 : 트랜잭션, JDBC, ORM 지원, XML 지원 - 기술 통합 : 캐시, 이메일, 원격접근, 스케줄링 - 테스트 : 스프링 기반 테스트 지원 - 언어 : 코틀린, 그루비 스프링의 핵심 - 스프링은 자바 언어 기반의 프레임 워크 - 자바 언어의 가장 큰 특징 - 객체지향언어 - 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임 워크 객체 지향 특징 1. 추상화 2. 캡슐화 3. 상속 4. 다형성 객체 지향 프로그래밍 : 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시작에서 벗어나 ..