728x90

WEB/Spring 29

스프링캠프 2017 Async & Spring

동기 비동기를 언급할 때는 항상 무엇과 무엇이 와 어떤 시간을? 관한 언급이 있어야 한다. 메소드 리턴시간 과 실제로 결과를 전달받는 시간이 다르면 비동기 라고 생각하면 된다. 블록킹 논블록킹 은 동기 비동기와 는 개념이 다르다. 내가 직접 제어할 수 없는 대상을 상대하는 방법 (IO, 멀티스레드 동기화) 이 경우에는 내가 비동기적으로 시킨 제 3의 스레드에서 결과를 다 만들어서 값을 리턴할떄까지 블록상태(대기)에 들어간다. @Async 메소드의 리턴타입은 void, Future , ListenableFuture , CompletableFuture 로 총 4가지다. 메소드호출에서 리턴되는 시점하고 실제 결과를 가져오는 시점이 다르다. spring 4.0에서 추가된 자바 인터페이스이다. 성공했을때와 실패해..

WEB/Spring 2021.09.10

김영한 (스프링 핵심원리 9) 프로토타입 스코프 - 싱글톤 빈과 함께 사용시 문제점

빈 스코프란? 스프링 빈은 기본적으로 singleton scope로 생성 되기 때문이다. scope는 번역 그대로 빈이 존재할 수 있는 범위를 뜻한다. 싱글톤 = 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. 프로토타입 = 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지않는 매우 짧은 범위의 스코프이다. request = 웹요청이 들어오고 나갈때까지 유지되는 스코프 이다. session = 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프이다. application = 웹의 서블릿 컨텍스 와 같은 범위로 유지되는 스코프이다. 프로토타입 스코프 싱글톤 스코프의 빈을 조회하면 스프링 컨테이너는 항상 같은 인스턴스의 스프링 빈을 반..

WEB/Spring 2021.02.15

김영한 (스프링 핵심원리 8) 빈 생명주기 콜백 시작

빈 생명 주기 콜백 시작 데이터베이스 커넥션 풀이나 , 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면 객체의 초기화와 종료 작업이 필요하다. package hello.core; public class NetworkClient { private String url; public NetworkClient() { System.out.println("생성자 호출, url = " + url); connect(); call("초기화 연결 메세지"); } public void setUrl(String url) { this.url = url; } //서비스를 시작시 호출 public void connect() { System.ou..

WEB/Spring 2021.02.14

김영한 (스프링 핵심 원리 7) 의존관계 자동 주입

다양한 의존관계 주입 방법 스프링 빈을 등록을 하는 단계와 의존관계를 주입하는 단계가 따로 되어있다. 생성자 주입 생성자 호출시점에 딱 1번만 호출되는것이 보장된다. 불변,필수 의존관계에 사용한다. 좋은 코딩 습관은 항상 제약이 있는 것이 좋다. private final 은 값이 무조건 있어야 된다는 뜻이다. 언어적으로 잡은것이다. 안주면 컴파일 에러를 동반한다. 수정자 주입(setter 주입) 관례로 field 값을 조정할때 set을 많이 사용한다. 선택, 변경 가능성이 있는 의존관계에 사용 필드주입 코드가 간결해서 많은 개발자들을 유혹하지만 외부에서 변경이 불가능해서 테스트하기 힘들다는 치명적인 단점 DI 프레임워크가 없으면 아무것도 못함 사용하지말자 @Configuration 같은 곳에서만 특별한 ..

WEB/Spring 2021.02.14

김영한 (스프링 핵심원리 6) 컴포넌트 스캔

컴포넌트 스캔과 의존관계 자동 주입 시작하기 스프링은 설정 정보가 없어도 자동으로 스프링 빈으로 등록하는 컴포넌트 스캔이라는 기능을 제공한다. package hello.core; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.FilterType; @Configuration @ComponentScan( excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configur..

WEB/Spring 2021.02.13

김영한 (스프링 핵심원리 5) 싱글톤 컨테이너

웹 애플리케이션과 싱글톤 현제의 Appconfig.class 의 형식이다. 클라이언트가 서비스를 요구할때마다 새로운 객체를 return 해주는 방식이다. package hello.core.singleton; import hello.core.AppConfig; import hello.core.member.MemberService; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; public class SingletonTest { @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer() { App..

WEB/Spring 2021.02.12

김영한 (스프링 핵심원리 4) 스프링 컨테이너와 스프링 빈

ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext는 인터페이스 이고 스프링 컨테이너이다. AnnotationConfigApplcationContext 는 구현체이다. @Bean(name="meberService") 이런식으로 이름을 부여할 수 있지만 절대로 중복이 되면 안된다. 현재까지는 스프링 컨테이너를 생성하고, 설정(구성) 정보를 참고해서 스프링 빈도 등록하고, 의존관계도 설정했다. 이제 Bean 들이 잘 등록이 되었는지 확인을 해보자. package hello.core.beanfind; import hello.core.AppConfig; im..

WEB/Spring 2021.02.12
728x90