반응형
💋 오늘 공부한 내용
- 스프링 강의를 봤다. 오늘 공부한 내용은...
- 빈 생명주기 콜백!
- 데이터베이스 커넥션 풀 연결 같이 빈 생성과 초기화를 분리하거나, 커넥션 끊기와 같이 빈 소멸 시의 동작을 지정해야 할 때 사용한다.
- 생명주기 따라서 생성 직후, 소멸 직전에 대한 내용을 지정할 수 있는데 세 가지 방법이 있음
- 인터페이스(InitializingBean, DisposableBean) 사용하는 방법, 설정 파일 사용하는 방법, 어노테이션 사용하는 방법(@PostConstruct, @PreDestroy)
- 인터페이스는 구리고, 가능하면 어노테이션, 외부 라이브러리 코드라 불가능하면 설정 파일 통해서 구현하자
- 빈 스코프!
- 기본적으로는 싱글톤으로 관리되기 때문에 빈은 스프링 컨테이너 생성 시에 같이 만들어지고 스프링 컨테이너 소멸, 긍까 애플리케이션 종료 시에 사라지는데 이걸 내가 직접 지정해주는 몇 가지 방법을 스프링에서 지원함
- 크게 세 가지가 있는데, 싱글톤, 프로토타입, 웹 스코프가 있음. 빈에 @Scope("prototype") 처럼 지정해줄 수 있음
- 싱글톤은 이미 알고 있는 그것
- 프로토타입은 빈 생성과 의존성 주입까지만 하고, 그뒤로는 컨테이너에서 관리 안함. 소멸 시키고 싶으면 직접 소멸 메서드 실행해줘야함. 중요한 점은, ApplicationContext에서 빈을 꺼내오려고 할 때에만 새로운 객체를 생성해서 빈으로 등록해준다는 것임.
- 싱글톤 빈 안에서 프로토타입 빈을 필드로 관리하게 된다면, 싱글톤의 의존성을 받을 때 ApplicationContext getBean()을 통해서 처음 받아올 때만 새로운 객체를 생성하게 되므로 사실상 싱글톤이랑 다를게 없음.
- 해결 방법은 크게 두 가지가 있는데, 우리가 하고싶은 것은 Dependency Lookup이라고 함. (DL) 주입과 다르게 내가 원하는 객체를 직접 찾아온다는 의미로 이해하면 될듯!
- ApplicationContext 자체를 싱글톤 빈에서 주입받아서 매번 getBean()하는 방법이 있다. 좀 단순무식한 방법임.
- 두 번째 방법은 스프링에서 제공하는 ObjectFactory, ObjectProvider나, 자바에서 제공하는 Provider를 사용하는 방법이다. 일단 이 클래스로 의존성 주입을 받아놓고, 클래스에서 제공하는 getObject(), get() 메서드를 이용하면 그때그때 빈을 생성해서 가져올 수 있음.
- 웹 스코프는 대표적으로 request 스코프가 있는데 하나의 요청에 대해서 새로운 빈을 하나씩 만드는 방법
- 처음에 request가 안들어와서 스프링이 의존성 주입에 실패하는 문제가 발생한다면, 위에서 말한 Provider 혹은 프록시로 해결할 수 있음. 프록시를 통해서는 그냥 처음에 가짜를 넣어놓는 작업임. 진짜 객체 조회를 꼭 필요한 시점까지 지연 처리한다는 것이 중요함!
- 말랑 said: 프로토타입 빈에서도 프록시로 사용해도 될까?
- 안된다.
- 프록시로 프로토타입 빈을 감싸게 되면, getBean() 메서드를 호출하고 받아온 객체의 메서드를 호출하는 방식으로 작동하는데, 프록시 타입 객체의 메서드를 호출할 때마다 getBean()이 계속 호출되어서 매번 새로운 객체가 만들어져서 원하는대로 작동하지 않는다.
- request 빈은 getBean()을 통해 가져왔을 때 항상 같은 객체가 생성되는 것이 아니라, 같은 요청인 경우에 같은 빈이 반환되기 때문에 괜찮다.
💋 감정 회고
- 이리내랑 같이 방학동안 모여서 공부를 하기로 했다. 오늘은 주노, 말랑이도 와서 같이 공부하고 갔다.
- 방학 동안 목표를 아래와 같이 정리해봤다.
- 스프링 강의 볼 수 있는 데까지 보기 (어디까지 볼지는 좀 강의를 봐가면서 각을 볼 예정)
- 1% 네트워크 원리 책 3,4장 빼고 다 읽기
- 위의 목표를 달성하면 아주 즐거운 방학이 될 듯!
- 6/10 ~ 6/13 교토 2박, 오사카 1박으로 일본을 다녀왔다. 너무 재밌었고, 완전 눈물나게 아쉽다ㅠㅠㅠㅠ 다시 돌아가고 싶어... 올해만 교토 오사카는 두번째인데도 맨날 새롭고 너무 재밌다. 올해 일본 3번째인데 이대로 기세면 레벨3 방학때 또 가고싶어서 갈듯... 진지하게 깃짱코딩 차려서 나중에 일본에 좀 살아봐야겠다.
💋 오늘의 포스팅
https://engineerinsight.tistory.com/111
[Spring] 빈 생명주기 콜백: 인터페이스(InitializingBean, DisposableBean), 설정 파일(initMethod, destroyMethod),
💋 빈 생명주기 콜백 스프링에서 빈을 최초에 생성하는 작업을 크게 본다면 '생성'이라고 할 수 있겠지만, 상세히 구분한다면 생성과 초기화 작업으로 나눌 수 있다. 생성자를 통해서 내부 값들
engineerinsight.tistory.com
반응형
'TIL > 2023' 카테고리의 다른 글
[TIL] 23.06.20 (0) | 2023.06.20 |
---|---|
[TIL] 23.06.16 (0) | 2023.06.17 |
[TIL] 23.05.26 (1) | 2023.05.26 |
[TIL] 23.05.25 (0) | 2023.05.25 |
[TIL] 23.05.24 (3) | 2023.05.24 |