1. Overview
์คํ๋ง ํ๋ ์์ํฌ์ ๋น ์ค์ฝํ๋ IoC ์ปจํ ์ด๋ ๋ด์ ์ ์๋ ๋น์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ฉ๋๋ก ์ฌ์ฉ๋๋ค.
2. Bean Life Cycle
์คํ๋ง ์ปจํ
์ด๋ ์์
๐ ๋น ์์ฑ
๐ DI
๐ ์ปค์คํ
์ด๊ธฐํ ๋ฉ์๋(@PostConstructor
)
๐ ๋น ์ฌ์ฉ
๐ ์ปค์คํ
์๋ฉธ ๋ฉ์๋(@PreDestroy
)
3. 6 Types of Scopes
์คํ๋ง ํ๋ ์์ํฌ ์ต์ ๋ฒ์ ์์๋ 6๊ฐ์ง์ ๋น ์ค์ฝํ๊ฐ ์ ์๋์ด ์๋ค.
- Singleton Scope: ์ปจํ ์ด๋๋ ์ฑ๊ธํค ์ค์ฝํ๋ก ์ ์๋ ๋น์ ๋จ์ผ ์ธ์คํด์ค๋ก ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ์์ฒญ์ ๋์ผํ ์ค๋ธ์ ํธ๋ฅผ ๋ฐํํ๋ค. ์ฑ๊ธํค ์ค์ฝํ๋ฅผ ๊ฐ์ง ๋น์ด ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์ ์ฅํ ๊ณต๊ฐ์ด ํ๋์ธ๋ฐ ์๋ก ๋ฎ์ด์ฐ๊ณ ์ฝ์ผ๋ฉด ์ํํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ฌด์ํ(stateless) ๋ฐฉ์์ผ๋ก ์ค๊ณํด์ผ ํ๋ค. ๊ฐ๋ฐ์๊ฐ ๋ฌ๋ฆฌ ์ค์ ์ ํ์ง ์์ ๊ฒฝ์ฐ ๋น์ ์ฑ๊ธํค ์ค์ฝํ(default)๋ฅผ ๊ฐ์ง๋ค.
// Java ์ค์
// ์ค์ ์ ๋ณด ํ์ฉ
@Configuration
public class AppConfiguration {
@Bean
@Scope(โsingletonโ)
public MyBean getMyBean() {
return new MyBean();
}
}
// ComponentScan ํ์ฉ
@Component
@Scope(โsingletonโ)
public class MyBean {
...
}
// xml ์ค์
<bean id=โmyBeanโ class=โorg.bean.scope.MyBeanโ scope=โsingletonโ />
-
Prototype Scope: ํ๋กํ ํ์ ์ค์ฝํ๋ก ์ ์๋ ๋น์ ์ปจํ ์ด๋๋ก๋ถํฐ ์์ฒญ๋ ๋๋ง๋ค ๋ค๋ฅธ ์ธ์คํด์ค๋ก ๋ฐํ๋๋ค. ์ฑ๊ธํค ์ค์ฝํ๋ก ์ ์๋ ๋น ๋ด๋ถ์ ์ฃผ์ ๋๋ ์คํ๋ง ๋น์ด ํ๋กํ ํ์ ์ผ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ํ๋กํ ํ์ ์ ์ค์ฝํ๋ฅผ ๊ฐ์ง๋ ๋น์ ์์ฒญ๋ง๋ค ์์ฑ๋ ๊ฒ์ด๋ผ ๊ธฐ๋ํ์ง๋ง ์ฑ๊ธํค ๋น๊ณผ ํจ๊ป ์ฌ์ฉํ ๊ฒฝ์ฐ ๊ณ์ ์ ์ง๋๋ฉฐ ์์๊ณผ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด ๋ธ๋ค.
-
Web Aware Scopes
- Request Scope: ์น ์์ฒญ์ด ๋ค์ด์ค๊ณ ๋๊ฐ ๋๊น์ง ์ ์ง๋๋ค. Request ์ค์ฝํ ๋น์ ์ ์ํ ๋๋ proxyMode ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ๊ผญ ์ถ๊ฐํด์ผ ํ๋ค. ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ตฌ๋๋ ๋ ์ฑ๊ธํค ๋น์ ์์ฑ ํ ์ด๊ธฐํ ๋ฐ ์์กด ๊ด๊ณ ์ค์ ์์ ์ด ์งํ๋์ง๋ง, request ์ค์ฝํ ๋นํ ์ฌ์ฉ์์ ์์ฒญ์ด ์์ผ๋ง ์์ฑ๋๊ธฐ ๋๋ฌธ์ด๋ค.
@Bean @Scope(value = โrequestโ, proxyMode = ScopedProxyMode.TARGET_CLASS) public MyBean requestScopedBean() { return new MyBean(); } @Bean @RequestScope public MyBean requestScopedBean() { return new MyBean(); }
-
Session Scope: ์ธ์ ์ด ์ด์์์ ๋๊น์ง ์ ์ง๋๋ค. Request Scope์ ๋์ผํ๊ฒ ํ๋ก์๋ฅผ ์ฌ์ฉํด์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
-
Application Scope: ์๋ธ๋ฆฟ ์ปจํ ์คํธ์ ๋ผ์ดํ ์ฌ์ดํด์ ํจ๊ป ํ๋ค.
-
WebSocket Scope: ์น์์ผ๊ณผ ๋์ผํ ๋ผ์ดํ ์ฌ์ดํด์ ๊ฐ์ง๋ค.
References
https://catsbi.oopy.io
https://www.baeldung.com