개발/Spring
-
(스프링 기본) 31 - 웹 스코프 + 프록시개발/Spring 2024. 10. 30. 10:19
* 웹 스코프 특징- 웹 환경에서만 동작한다.- 스프링이 해당 스코프의 종료 시점까지 관리한다. -> 종료 메서드 호출 ■ 웹 스코프 종류 - request : HTTP 요청 하나가 들어오고 나갈 때까지 유지되는 스코프각각의 HTTP 요청마다 별도의 빈 인스턴스가 생성되고 관리- session : HTTP Session 과 동일한 생명주기 가지는 스코프- application : ServletContext 와 동일한 생명주기 가지는 스코프- websocket : 웹 소켓과 동일한 생명주기 가지는 스코프 ■ 예제 실습//web 라이브러리 추가implementation 'org.springframework.boot:spring-boot-starter-web' 웹환경 구동을 위해 gradel 에 다음 내용을 ..
-
(스프링 기본) 30 - 빈 스코프 (싱글톤, 프로토 타입 - ObjectProvider, Provider)개발/Spring 2024. 10. 29. 15:34
이전까지는 스프링 빈의 경우스프링 컨테이너 시작과 함께 시작 -> 스프링 컨테이너 종료 까지 유지된다고 배웠다.이는 기본적으로 스프링 빈이 싱글톤 빈으로 생성되기 때문인데,스코프란 빈이 존재할 수 있는 범위를 뜻한다. * 스프링 스코프- 싱글톤 : 스프링 컨테이너 시작과 종료까지 (가장 넓은 범위)- 프로토타입 : 프로토타입 빈의 생성 의존관계 주입까지만 관여하고 더는 관리하지 않음 (짧음) * 웹 관련 스코프- request : 웹 요청이 들어오고 나갈때 까지 유지- session : 웹 세션이 생성되고 종료될 때까지 유지- application : 웹의 서블릿 컨텍스와 같은 범위로 유지 ■ 프로토타입 스코프 프로토타입은 싱글톤과 달리 새로운 인스턴스 생성해서 반환한다. 빈을 스프링 컨테이너에 요청하..
-
(스프링 기본) 29 - 어노테이션 @PostConstruct, @PreDestroy개발/Spring 2024. 10. 29. 11:40
@PostConstructpublic void init() { System.out.println("NetworkClient.init"); connect(); call("초기화 연결 메세지");}@PreDestroypublic void close() { System.out.println("NetworkClient.close"); disconnect();} @PostConstruct : 생성된 후에@PreDestroy : 종료되기 전에 글자 그대로 이해하면 쉽다. jakarta 로 java 단에서 공식적으로 지원하는 어노테이션이다. 최신 스프링에서 가장 권장하는 방법어노테이션만 붙이면 된다.패키지가 jakarta 로 돼 있어 스프링 종속 기술이 아니라 다른 컨테이너에서도 동작한..
-
(스프링 기본) 28 - 빈 등록 초기화, 소멸 메서드 (initMethod, destroyMethod)개발/Spring 2024. 10. 29. 11:33
@Configurationstatic class LifeCycleConfig { @Bean(initMethod = "init", destroyMethod = "close") public NetworkClient networkClient() { NetworkClient networkClient = new NetworkClient(); networkClient.setUrl("http://hello-spring.dev"); return networkClient; }}public void init() { System.out.println("NetworkClient.init"); connect(); call("초기화 연결 메세지");}publi..
-
(스프링 기본) 27 - 인터페이스 InitializingBean, DisposableBean개발/Spring 2024. 10. 29. 11:22
public class NetworkClient implements InitializingBean {public interface InitializingBean { void afterPropertiesSet() throws Exception;} 다음과 같이 코드에서 InitializingBean 인터페이스를 구현하도록 만든다. InitializingBean 에는 afterPropertiesSet 이 존재하는데 이는 의존 관계 주입이 끝나면 호출하겠다. 는 뜻이다. @Overridepublic void afterPropertiesSet() throws Exception { connect(); call("초기화 연결 메세지");} 다음과 같이 오버라이딩을 통해 연결과 콜 처리를 진행한다. p..
-
(스프링 기본) 26 - 빈 생명주기 콜백개발/Spring 2024. 10. 29. 10:58
데이터베이스 커넥션 풀(애플리케이션 서버랑 DB 랑 미리 연결해 둠), 네트워크 소켓,애플리케이션 종료 시점에 연결을 모두 종료하는 작업 진행하려면 객체 초기화 및 종료 작업 필요package hello.core.lifecycle;public class NetworkClient { private String url; public NetworkClient() { System.out.println("생성자 호출, url = " + url); connect(); call("초기화 연결 메세지"); } public void setUrl(String url) { this.url = url; } //서비스 시작시 호출 publi..
-
(스프링 기본) 25 - 의존 관계 등록 올바른 실무 기준 (자동, 수동)개발/Spring 2024. 10. 28. 16:46
기본으로는 ComponentScan 자동 등록을 사용하자!! (추천) @Controller, @Service, @Repository 처럼 계층 맞추어일반적인 애플리케이션 로직 자동으로 스캔할 수 있도록 스프링이 지원한다. 더불어 현재 스프링 부트의 경우, 컴포넌트 스캔을 기본으로 사용하고,다양한 스프링 빈들도 조건이 맞으면 자동 등록 되도록 설계되었다. 자동으로 빈 등록을 사용해도 OCP, DIP 지킬 수 있다. ■ 수동 빈 등록은 언제 하는가? 애플리케이션은 크게 업무로직과 기술 지원 로직으로 나뉜다. 1. 업무로직 빈 (자동 등록 추천)웹을 지원하는 컨트롤러, 핵심 비즈니스 로직 있는 서비스, 데이터 계층 로직 처리하는 리포지토리 등보통 비즈니스 요구사항 개발할 때 추가되거나 변경된다. 2. 기..
-
(스프링 기본) 24 - 조회된 빈이 모두 필요할 때 (List, Map)개발/Spring 2024. 10. 28. 16:22
해당 빈이 모두 필요할 경우 List 또는 Map 을 활용하면 된다. public class AllBeanTest { @Test void findAllBean() { ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class); } static class DiscountService { private final Map policyMap; private final List policies; @Autowired public DiscountService(Map policyMap, List polic..