전체 글(754)
-
[Spring] request scope bean과 provider에 대한 나름의 이해
request scope bean은 request가 들어와서 나갈때까지 유지된다. 이를 UUID를 통해서 확인해 볼 수 있다. UUID는 세계에서 딱 하나 존재하는 유니크한 ID이다. UUID는 이 빈을 통해 출력된 곳에서 모두 동일했다. 그런데 controller에서 빈을 생성자 주입을 통해 받을 때 이 빈은 없다. 왜냐하면 controller 생성 시점에는 요청이 들어오지 않았기 때문이다. 따라서 오류가 난다. 이를 해결하기 위해서 Provier나 ObjectProvider를 이용한다. 주입을 받는 것은 request scope bean이 아니라 이 빈을 룩업하는 provider이다. 그리고 요청이 들어오는 로직에서 빈을 조회하면 객체가 생성된다. 이때는 요청이 들어왔기 때문에 오류가 발생하지 않는다..
2023.11.02 -
[Spring] Web Scope에 대한 나름의 이해
Web Scope는 웹과 관련된 스코프를 의미한다. 다음의 것들이 있다. request scope: 요청의 시작과 종료까지 유지된다. session: 세션의 시작과 종료까지 유지된다. application: 서블릿 컨텍스트와 동일한 생명주기를 갖는다. websocket: 웹소켓과 동일한 생명주기를 갖는다. request를 예로 들어보자. 요청이 들어오면 빈을 만든다. 그리고 요청이 끝나면 빈을 삭제한다. Referencehttps://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8&unitId=55391학습 페..
2023.11.02 -
[Spring] 싱글톤 빈과 프로토타입 빈을 함께 사용할 때 생기는 문제점에 대한 해결책에 대한 나름의 이해
크게 두 가지 방법이 있다. 하나는 Spring에서 제공하는 ObjectProvider를 이용하는 것이다. 다른 하나는 JSR-330에서 제공하는 Provider를 이용하는 것이다. 각각 다음과 같이 사용한다. ObjectProvider@Autowired private ObjectProvider prototypeBeanProvider; public int logic() { PrototypeBean prototypeBean = prototypeBeanProvider.getObject(); prototypeBean.addCount(); int count = prototypeBean.getCount(); return count; }Provider@Autowired private Provider prototyp..
2023.11.02 -
[Spring] 싱글톤 빈과 프로토타입 빈을 함께 사용할 때 생기는 문제점에 대한 나름의 이해
프로토타입 빈의 장점은 데이터를 클라이언트별로 갱신해야할 때이다. 싱글톤은 이게 안된다. 모든 클라이언트가 공유하기 때문이다. 하지만 이를 의도하고 싱글톤 빈에 프로토타입 빈을 넣으면 문제가 생긴다. 우리의 의도는 각 클라이언트마다 새로운 프로토타입 빈을 얻는 것이다. 하지만 싱글톤 빈이 생성되고 프로토타입 빈이 의존관계로 주입되면 클라이언트마다 결과적으로 더 이상 프로토타입 빈이 만들어지지 않는다. 왜냐하면 프로토타입 빈은 요청할때 생기는 것이다. 싱글톤 빈이 요청할때는 의존관계를 주입받을 때인데 이건 딱 한번만 일어나는 것이다. 즉, 하나의 요청이기 때문에 하나의 프로토타입 빈만 만들어지게 되는 것이다. 그렇다면 어떻게 하면 우리의 원래 의도인 클라이언트마다 새로운 프로토타입이 만들어져 싱글톤 빈이 ..
2023.11.02 -
[Spring] 프로토타입 스코프에 대한 나름의 이해
프로토타입 스코프의 빈은 스프링이 빈을 생성하고 의존관계 주입하고 초기화 메서드를 해주는 것까지만 한다. 그 후 관리는 클라이언트가 해야한다. 예를 들어, 빈 종료도 클라이언트가 해야한다. 이와 다르게 싱글톤 스코프 빈은 스프링 컨테이너가 생성부터 종료까지 관리해준다. 프로토타입 스코프 빈은 요청이 올때마다 만들어져 클라이언트에 반환된다. 이를 @PostConstruct가 붙은 초기화 메소드 init을 통해서 확인해 볼 수 있다.@Scope("prototype") static class PrototypeBean { @PostConstruct public void init() { System.out.println("PrototypeBean.init"); } @PreDestroy public void des..
2023.11.02 -
[SQL][2][X] 입양 시각 구하기(2)
문제 설명 ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다. NAMETYPENULLABLE ANIMAL_IDVARCHAR(N)FALSE ANIMAL_TYPEVARCHAR(N)FALSE DATETIMEDATETIMEFALSE NAMEVARCHAR(N)TRUE SEX_UPON_OUTCOMEVARCHAR(N)FALSE 보호소에서는 몇 시에 입양이 가장 활발하게 일어나는지 알아보려 합니다. 0시부터 23시까지, 각 시간대별로 입양이 몇..
2023.11.01