๋น(Bean)์ ์คํ๋ง ํ๋ ์์ํฌ์์ ๊ด๋ฆฌ๋๋ ๊ฐ์ฒด๋ฅผ ๋งํ๋ค. ๋น์ ์คํ๋ง ์ปจํ
์ด๋์ ์ํด ์์ฑ, ๊ด๋ฆฌ ๋ฐ ์กฐ๋ฆฝ๋๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์
์ ๋ค์ํ ๊ตฌ์ฑ ์์๋ก ์ฌ์ฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์๋ฐ ํด๋์ค๋ฅผ ๋น์ผ๋ก ๋ฑ๋กํ์ฌ ์ฌ์ฉํ๋ค. ์ด๋ ๊ฒ ๋ฑ๋ก๋ ๋น์ ์คํ๋ง ์ปจํ
์ด๋์์ ์์ฑ๋๊ณ , ํ์ํ ๊ณณ์์ ์ฌ์ฉํ ์ ์๋ค.
๋น์ ๋ฑ๋กํ๋ ค๋ฉด ํด๋น ํด๋์ค์ @Component, @Service, @Repository, @Controller ๋ฑ์ ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ๋ฉด ๋๋ค. ์ด ์ด๋
ธํ
์ด์
๋ค์ ์คํ๋ง์ด ์ ๊ณตํ๋ ์ด๋
ธํ
์ด์
์ผ๋ก, ๊ฐ๊ฐ ์ปดํฌ๋ํธ, ์๋น์ค, ๋ ํฌ์งํ ๋ฆฌ, ์ปจํธ๋กค๋ฌ ๋ฑ์ ์ญํ ์ ๋ํ๋ธ๋ค.
์คํ๋ง ์ด๋
ธํ
์ด์
์ ๋ฆฌ: https://hanav.tistory.com/191
Spring ์๋ ธํ ์ด์ ์ ๋ฆฌ
@Component: ์คํ๋ง์ ์ปดํฌ๋ํธ ์ค์บ๋์ ์ํด ๋น์ผ๋ก ๋ฑ๋ก๋ ํด๋์ค๋ฅผ ๋ํ๋ธ๋ค. @Controller: ์คํ๋ง MVC์์ ์ปจํธ๋กค๋ฌ ํด๋์ค๋ฅผ ๋ํ๋ธ๋ค. HTTP ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์๋ต์ ๋ฐํํ๋ ์ญํ ์ ํ๋ค. @Service:
hanav.tistory.com
๋น์ ์คํ๋ง ์ปจํ
์ด๋์์ ์์ฑ๋ ํ์๋ ์์กด์ฑ ์ฃผ์
(Dependency Injection)์ ๋ฐ์ ์ ์๋ค. ์ฆ, ๋ค๋ฅธ ๋น๊ณผ์ ์์กด ๊ด๊ณ๋ฅผ ์คํ๋ง์ด ์๋์ผ๋ก ์ฒ๋ฆฌํด์ค๋ค. ์ด๋ฅผ ํตํด ๊ฐ์ฒด ๊ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ ์ ์๊ณ , ์ ์ฐํ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ด ๊ฐ๋ฅํด์ง๋ค.
๋ ์คํ๋ง ๋น์ ์ปจํ
์ด๋์ ์ค์ ์ ๋ฐ๋ผ ์ค์ฝํ๋ฅผ ์ง์ ํ ์ ์๋ค. ์ฑ๊ธํค, ํ๋กํ ํ์
๋ฑ์ ์ค์ฝํ๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ์ปจํ
์ด๋๊ฐ ์์ฑ, ๊ด๋ฆฌ ๋ฐ ์๋ฉธ ์ฃผ๊ธฐ๋ฅผ ์ ์ดํ๋ค.
Scope์ ์ข ๋ฅ
1. Singleton: ๊ธฐ๋ณธ ์คํ๋ง ๋น์ Scope์ด๋ค. Singleton Scope๋ก ์ ์๋ ๋น์ ํ๋์ ์ธ์คํด์ค๋ง ์์ฑ๋๋ฉฐ, ์ปจํ ์ด๋ ์ ์ฒด์์ ๊ณต์ ๋๋ค. ๋ฐ๋ผ์, ๋์ผํ ๋น์ ๋ํ ์ฌ๋ฌ ์์ฒญ์ด ์์ ๋ ํญ์ ๋์ผํ ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ค.
2. Prototype: Prototype Scope๋ก ์ ์๋ ๋น์ ๋งค๋ฒ ์์ฒญ๋ ๋๋ง๋ค ์๋ก์ด ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ค. ๊ฐ ์์ฒญ๋ง๋ค ๋ณ๋์ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์ ๊ณตํ๋ฏ๋ก, ๋น์ ์ํ๊ฐ ์์ฒญ ๊ฐ์ ๊ณต์ ๋์ง ์๋๋ค.
3. Request: Request Scope๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์๋ง ์ฌ์ฉ๋๋ Scope์ด๋ค. ๊ฐ๊ฐ์ HTTP ์์ฒญ๋ง๋ค ์๋ก์ด ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ค. ๋ฐ๋ผ์, ๊ฐ์ ์์ฒญ ๋ด์์๋ ๋์ผํ ์ธ์คํด์ค๋ฅผ ๊ณต์ ํ๋ฉฐ, ๋ค๋ฅธ ์์ฒญ ์ฌ์ด์๋ ๊ณต์ ๋์ง ์๋๋ค.
4. Session: Session Scope๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋๋ Scope๋ก, ํ๋์ ์ธ์ ์ ๋ํด ํ๋์ ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ค. ๋์ผํ ์ธ์ ๋ด์์๋ ๋์ผํ ์ธ์คํด์ค๋ฅผ ๊ณต์ ํ๋ฉฐ, ๋ค๋ฅธ ์ธ์ ๊ฐ์๋ ๊ณต์ ๋์ง ์๋๋ค.
5. Application: Application Scope๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด์์ ํ๋์ ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ฉฐ ๊ณต์ ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์๋ช ์ฃผ๊ธฐ ๋์ ์ ์ง๋๋ฉฐ, ๋ชจ๋ ์ธ์ ๋ฐ ์์ฒญ์์ ๊ณต์ ๋๋ค.
๋น์ ์คํ๋ง์ ํต์ฌ ๊ฐ๋
์ค ํ๋๋ก, ์ ํ๋ฆฌ์ผ์ด์
์ ๋ชจ๋ํ์ ์ ์ฐ์ฑ์ ๋์ด๋ ๋ฐ ์ค์ํ ์ญํ ์ ํ๋ค. ์คํ๋ง์ IoC(Inversion of Control) ์ปจํ
์ด๋๊ฐ ๋น์ ์์ฑ๊ณผ ๊ด๋ฆฌ๋ฅผ ๋ด๋นํ๋ฏ๋ก, ๊ฐ๋ฐ์๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ ์ ์๋ค. ๋ํ, ๋น์ ์คํ๋ง์ ๋ค๋ฅธ ๊ธฐ๋ฅ์ธ ์์กด์ฑ ์ฃผ์
, AOP ๋ฑ๊ณผ ํจ๊ป ์ฌ์ฉ๋์ด ๊ฐ๋ฐ ๋ฐ ์ ์ง๋ณด์๋ฅผ ์ฉ์ดํ๊ฒ ํ๋ค.
'๐ฅ๏ธ > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] ์ธ์ (Session), ์ฟ ํค(Cookie), ์บ์(Cache) (0) | 2023.07.05 |
---|---|
[Spring] JPA ๋? (0) | 2023.07.05 |
[Spring] Spring ์๋ ธํ ์ด์ ์ ๋ฆฌ (0) | 2023.07.05 |
[Spring] DTO์ Entity, ์ ๋ถ๋ฆฌํด์ ์ฌ์ฉํ ๊น? (0) | 2023.06.29 |
[Spring] SpringToolSuite4 ํ๋ก๊ทธ๋จ ์คํ ์๋ ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ (0) | 2023.06.03 |