• ์ž๋™ ์ฃผ์ž…๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ
  • ์Šคํ”„๋ง์ด ์ง์ ‘ ํด๋ž˜์Šค๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ
  • ์„ค์ • ์ฝ”๋“œ๊ฐ€ ํฌ๊ฒŒ ์ค„์–ด๋“ฆ

Component-scan์€ xml์— ์ผ์ผ์ด ๋นˆ๋“ฑ๋ก์„ ํ•˜์ง€์•Š๊ณ  ๊ฐ ๋นˆ ํด๋ž˜์Šค์— @Component๋ฅผ ํ†ตํ•ด ์ž๋™ ๋นˆ ๋“ฑ๋ก์ด ๋œ๋‹ค.

@Component @Controller @Service @Repository์™€ ๊ฐ™์€ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ž๋™ ๋“ฑ๋ก ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.

 

 

 

@Component ์• ๋…ธํ…Œ์ด์…˜์œผ๋กœ ์Šค์บ” ๋Œ€์ƒ ์ง€์ •

 

 

์Šคํ”„๋ง์ด ๊ฒ€์ƒ‰ํ•ด์„œ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์œผ๋ ค๋ฉด ํด๋ž˜์Šค์— @Component ์• ๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ์•ผ ํ•œ๋‹ค.
์ด ์• ๋…ธํ…Œ์ด์…˜์€ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์Šค์บ” ๋Œ€์ƒ์œผ๋กœ ํ‘œ์‹œํ•œ๋‹ค.

 

  • @Component ์• ๋…ธํ…Œ์ด์…˜์— ๊ฐ’์„ ์ฃผ๋ฉด ๊ทธ ๊ฐ’์„ ๋นˆ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
    ex. @Component("listPrinter")

 

 


@ComponentScan ์• ๋…ธํ…Œ์ด์…˜์œผ๋กœ ์Šค์บ” ์„ค์ •

 

@Component ์• ๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ธ ํด๋ž˜์Šค๋ฅผ ์Šค์บ”ํ•ด์„œ ์Šคํ”„๋ง ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๋ ค๋ฉด, ์„ค์ • ํด๋ž˜์Šค์— @ComponentScan ์• ๋…ธํ…Œ์ด์…˜์„ ์ ์šฉํ•ด์•ผํ•œ๋‹ค.

 

 

 

@Configuration
@ComponentScan(basePackages = {"spring"})
public class AppCtx{
    ...
}

 

 

 

์ด ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด AppCtx ํด๋ž˜์Šค์—์„œ

 

@ComponentScan ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ @Component ์• ๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์„ค์ • ์ฝ”๋“œ๊ฐ€ ํ™•์—ฐํžˆ ์ค„์–ด๋“ ๋‹ค.


๋˜ ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ดํŽด๋ณด๋ฉด basePackages ์†์„ฑ๊ฐ’์€ {"spring"}์ด๋‹ค. ์ด ์†์„ฑ์€ ์Šค์บ” ๋Œ€์ƒ ํŒจํ‚ค์ง€ ๋ชฉ๋ก์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
์ด๋Š” spring ํŒจํ‚ค์ง€์™€ ๊ทธ ํ•˜์œ„ ํŒจํ‚ค์ง€์— ์†ํ•œ ํด๋ž˜์Šค๋ฅผ ์Šค์บ” ๋Œ€์ƒ์œผ๋กœ ์„ค์ •ํ•œ๋‹ค. ์Šค์บ” ๋Œ€์ƒ์— ํ•ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค์ค‘ @Component ์• ๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค.

 

 


 

 

์Šค์บ” ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•˜๊ฑฐ๋‚˜ ํฌํ•จํ•˜๊ธฐ

 

excludeFilters ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ์Šค์บ”ํ•  ๋•Œ ํŠน์ • ๋Œ€์ƒ์„ ์ž๋™ ๋“ฑ๋ก ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•  ์ˆ˜ ์žˆ๋‹ค.

// ์ •๊ทœ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•ด์„œ ์ œ์™ธ ๋Œ€์ƒ์„ ์ง€์ •ํ•œ๋‹ค.
// "spring."์œผ๋กœ ์‹œ์ž‘ํ•˜๊ณ  Dao๋กœ ๋๋‚˜๋Š” ์ •๊ทœ ํ‘œํ˜„์‹์„ ์ง€์ •
@ComponentScan(basePackages = {"spring"},
    excludeFilters = @Filter(type = FilterType.REGEX, pattern = "spring\\..*Dao"))





// AspectJ ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด ๋Œ€์ƒ์„ ์ง€์ •ํ•œ๋‹ค.
// spring ํŒจํ‚ค์ง€์˜ Dao๋กœ ๋๋‚˜๋Š” ํƒ€์ž…์„ ์ง€์ •
// AspectJ ํŒจํ„ด์ด ๋™์ž‘ํ•˜๋ ค๋ฉด ์˜์กด ๋Œ€์ƒ์— aspectjweaver๋ชจ๋“ˆ์„ ์ถ”๊ฐ€ํ•ด์•ผํ•œ๋‹ค.
@ComponentScan(basePackages = {"spring"},
        excludeFilters = @Filter(type = FilterType.ASPECTJ, pattern = "spring.*Dao"))





// ํŠน์ • ์• ๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ธ ํƒ€์ž…์„ ์ปดํฌ๋„ŒํŠธ ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•œ๋‹ค.
// ํŒจํ„ด์€ Stringp[] ํƒ€์ž…์ด๋ฏ€๋กœ ๋ฐฐ์—ด์„ ์ด์šฉํ•ด ํŒจํ„ด์„ ํ•œ ๊ฐœ ์ด์ƒ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
@ComponentScan(basePackages = {"spring", "spring2"},
        excludeFilters = @Filter(type = FilterType.Annotation, pattern = {NoProduct.class, ManualBean.class}))





// ํŠน์ • ํƒ€์ž…์ด๋‚˜ ๊ทธ ํ•˜์œ„ ํƒ€์ž…์„ ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•œ๋‹ค.
@ComponentScan(basePackages = {"spring"},
        excludeFilters = @Filter(type = FilterType.ASSIGNABLE_TYPE, classes = MemberDao.class))






// ์„ค์ •ํ•  ํ•„ํ„ฐ๊ฐ€ 2๊ฐœ ์ด์ƒ์ด๋ฉด excludeFilters ์†์„ฑ์— ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•ด์„œ ๋ชฉ๋ก์„ ์ „๋‹ฌํ•˜๋ฉด ๋œ๋‹ค.
@ComponentScan(basePackages = {"spring"},
        excludeFilters = {
                @Filter(type = FilterType.ANNOTATION, classes = ManualBean.class),
                @Filter(type = FilterType.REGEX, pattern = "spring2\\..*")
        }

 

 

 

 

 

 

@Component ์• ๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ธ ํด๋ž˜์Šค๋งŒ ์Šค์บ” ๋Œ€์ƒ์— ํฌํ•จ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

  • @Component
  • @Controller
  • @Service
  • @Repository
  • @Aspect
  • @Configuration

@Aspect๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋‚˜๋จธ์ง€ ์• ๋…ธํ…Œ์ด์…˜์€ @Component ์• ๋…ธํ…Œ์ด์…˜์— ๋Œ€ํ•œ ํŠน์ˆ˜ ์• ๋…ธํ…Œ์ด์…˜์ด๋‹ค.




 

์ปดํฌ๋„ŒํŠธ ์Šค์บ”์— ๋”ฐ๋ฅธ ์ถฉ๋Œ ์ฒ˜๋ฆฌ


์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์„œ Bean์„ ๋“ฑ๋กํ•  ๊ฒฝ์šฐ, ์•„๋ž˜์™€ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ์ถฉ๋Œ์ด ๋ฐœ์ƒ ๊ฐ€๋Šฅ

  1. Bean ์ด๋ฆ„์˜ ์ถฉ๋Œ
  2. ์ˆ˜๋™ ๋“ฑ๋ก์— ๋”ฐ๋ฅธ ์ถฉ๋Œ

2-1. Bean ์ด๋ฆ„ ์ถฉ๋Œ

  • ์„œ๋กœ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์— ๊ฐ™์€ ํด๋ž˜์Šค์˜ ์ด๋ฆ„์ด ์กด์žฌํ•˜๊ณ , ๋‘ ํด๋ž˜์Šค ๋ชจ๋‘ @Component ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™๊ฒŒ ๋œ๋‹ค๋ฉด,
    Exception์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋จ
  • ์ด๋Ÿด ๊ฒฝ์šฐ, ๋‘˜ ์ค‘ ํ•˜๋‚˜์— ๋ช…์‹œ์ ์œผ๋กœ Bean ์ด๋ฆ„์„ ์ง€์ •ํ•ด์„œ ์ด๋ฆ„ ์ถฉ๋Œ์„ ํ”ผํ•ด์•ผ ํ•จ

2-2. ์ˆ˜๋™ ๋“ฑ๋ก์— ๋”ฐ๋ฅธ ์ถฉ๋Œ

  1. ๊ฐ™์€ ํด๋ž˜์Šค๋ฅผ ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ์„ค์ •ํ•  ๋•Œ:
    • @Component ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ์ด๋ฏธ ์ง€์ •ํ•œ Bean์˜ ํด๋ž˜์Šค ์ด๋ฆ„์ด ์กด์žฌํ•˜์ง€๋งŒ,
      ํด๋ž˜์Šค ์„ค์ •์— ์ง์ ‘ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ ์ •ํ•ด ๋“ฑ๋กํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒ
    • ์ฆ‰, ์Šค์บ”ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” Bean ์ด๋ฆ„๊ณผ ์ˆ˜๋™ ๋“ฑ๋กํ•œ ์ด๋ฆ„์ด ๊ฐ™์„ ๊ฒฝ์šฐ, ์ˆ˜๋™ ๋“ฑ๋กํ•œ Bean์ด ์šฐ์„ ์‹œ ๋จ
  2. ๊ฐ™์€ ํด๋ž˜์Šค๋ฅผ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ์„ค์ •ํ•  ๋•Œ:
    • ๋งŒ์•ฝ, ์Šค์บ”ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” Bean ์ด๋ฆ„๊ณผ ๋™์ผํ•œ ํด๋ž˜์Šค๋ฅผ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ์ˆ˜๋™ ๋“ฑ๋กํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š”
      ๋‹ค๋ฅธ ์ด๋ฆ„์˜ ๋‘ ๊ฐœ์˜ Bean์ด ๋งŒ๋“ค์–ด์ง€๊ฒŒ ๋จ
    • ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” @Qualifier ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ์•Œ๋งž์€ Bean์„ ์„ ํƒํ•ด์•ผ ํ•จ

 


Reference.

'์ดˆ๋ณด ์›น ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์Šคํ”„๋ง5 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ž…๋ฌธ' link1

 

์‹œ์Šคํ…œ ์ฝœ์ด๋ž€?

์šด์˜ ์ฒด์ œ์˜ ์ปค๋„์ด ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค์— ๋Œ€ํ•ด,
์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์š”์ฒญ์— ๋”ฐ๋ผ ์ปค๋„์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค.

๋ณดํ†ต C๋‚˜ C++๊ณผ ๊ฐ™์€ ๊ณ ๊ธ‰ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ๋“ค์€
์ง์ ‘ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—
๊ณ ๊ธ‰ API๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์— ์ ‘๊ทผํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.



โœ” ์‹œ์Šคํ…œ ์ฝœ์€ ์™œ ํ•„์š”ํ• ๊นŒ?


์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์€ '์‘์šฉํ”„๋กœ๊ทธ๋žจ'์ด๋‹ค.

 

์œ ์ €๋ ˆ๋ฒจ์˜ ํ”„๋กœ๊ทธ๋žจ์€ ์œ ์ €๋ ˆ๋ฒจ์˜ ํ•จ์ˆ˜๋“ค ๋งŒ์œผ๋กœ๋Š” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ํž˜๋“ค๊ธฐ ๋•Œ๋ฌธ์—, ์ปค๋„(kernel)์˜ ๋„์›€์„ ๋ฐ˜๋“œ์‹œ ๋ฐ›์•„์•ผ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ž‘์—…์€ ์‘์šฉํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋Œ€ํ‘œ๋˜๋Š” ์œ ์ € ํ”„๋กœ์„ธ์Šค(User Process)์—์„œ ์œ ์ €๋ชจ๋“œ์—์„œ๋Š” ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋‹ค.

 

๋ฐ˜๋“œ์‹œ kernel์— ๊ด€๋ จ๋œ ๊ฒƒ์€ ์ปค๋„๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•œ ํ›„์—์•ผ, ํ•ด๋‹น ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๊ถŒํ•œ์ด ์ƒ๊ธด๋‹ค. ์ปค๋„ ๋ชจ๋“œ๋ฅผ ํ†ตํ•œ ์ด๋Ÿฌํ•œ ์ž‘์—…์€ ๋ฐ˜๋“œ์‹œ ์‹œ์Šคํ…œ ์ฝœ์„ ํ†ตํ•ด ์ˆ˜ํ–‰ํ•˜๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

 

โœ” ์‹œ์Šคํ…œ ์ฝœ์˜ ์ปค๋„ ๋ชจ๋“œ์™€ ์‚ฌ์šฉ์ž ๋ชจ๋“œ


1. ์ปค๋„ ๋ชจ๋“œ
ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ๊ฐ€ ์šด์˜์ฒด์ œ๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ถ€๋ถ„์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค๋ฉด, ํ˜„์žฌ ์šด์˜์ฒด์ œ์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ ์ค‘์ด๋ฉฐ CPU๊ฐ€ ์ปค๋„ ๋ชจ๋“œ์—์„œ ์ˆ˜ํ–‰ ์ค‘์ด๋ผ๊ณ  ํ•œ๋‹ค.
2. ์‚ฌ์šฉ์ž ๋ชจ๋“œ
ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ๊ฐ€ ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์ด ์กด์žฌํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜ํ–‰ ์ค‘์ด๋ฉฐ CPU๊ฐ€ ์‚ฌ์šฉ์ž ๋ชจ๋“œ์—์„œ ์ˆ˜ํ–‰ ์ค‘์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ์ผ๋ฐ˜ ๋ช…๋ น : ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ž๋ฃŒ๋ฅผ ์ฝ์–ด์™€์„œ CPU์—์„œ ๊ณ„์‚ฐํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์“ฐ๋Š” ์ผ๋ จ์˜ ๋ช…๋ น๋“ค. ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ. (์‚ฌ์šฉ์ž ๋ชจ๋“œ)
  • ํŠน๊ถŒ ๋ช…๋ น : ๋ณด์•ˆ์ด ํ•„์š”ํ•œ ๋ช…๋ น์œผ๋กœ ์ž…์ถœ๋ ฅ ์žฅ์น˜, ํƒ€์ด๋จธ ๋“ฑ ๊ฐ์ข… ์žฅ์น˜๋ฅผ ์ ‘๊ทผํ•˜๋Š” ๋ช…๋ น.(์ปค๋„ ๋ชจ๋“œ)
  • CPU ๋‚ด์— ๋ชจ๋“œ ๋น„ํŠธ๋ฅผ ๋‘์–ด ๋‘ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์ด ๋””์Šคํฌ์˜ ํŒŒ์ผ์„ ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜, ํ™”๋ฉด์— ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ด๋Ÿฌํ•œ ์ž‘์—…์€ ํŠน๊ถŒ ๋ช…๋ น์˜ ์ˆ˜ํ–‰์„ ํ•„์š”๋กœ ํ•œ๋‹ค.
  • ์ด์™€ ๊ฐ™์€ ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์€ ์Šค์Šค๋กœ ํŠน๊ถŒ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์šด์˜์ฒด์ œ์—๊ฒŒ ํŠน๊ถŒ ๋ช…๋ น์˜ ๋Œ€ํ–‰์„ ์š”์ฒญํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์„œ๋น„์Šค ์š”์ฒญ์€ ์‹œ์Šคํ…œ ์ฝœ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. (์ฆ‰, ํŠน๊ถŒ ๋ช…๋ น์˜ ๋Œ€ํ–‰์„ ์š”์ฒญํ•˜์—ฌ ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์ด ์ปค๋„ ์˜์—ญ์˜ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.)

 

 

 

 

โœ” ๋””์Šคํฌ์—์„œ ์ž๋ฃŒ๋ฅผ ์ฝ์–ด์˜ค๋Š” ์‹œ์Šคํ…œ ์ฝœ์ด๋ผ๊ณ  ๊ฐ€์ •!


  1. ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์Šคํ…œ ์ฝœ์„ ํ•˜๊ฒŒ ๋˜๋ฉด ์šด์˜์ฒด์ œ๋Š” ์ž์‹ ์˜ ์ปค๋„ ์˜์—ญ์— ์ •์˜๋œ ์‹œ์Šคํ…œ ์ฝœ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  2. CPU๊ฐ€ ์ปจํŠธ๋กค ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์„ธํŒ…ํ•ด ๋””์Šคํฌ ์ปจํŠธ๋กค๋Ÿฌ์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋ผ๊ณ  ๋ช…๋ นํ•œ๋‹ค.
  3. ๋””์Šคํฌ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋””์Šคํฌ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์™€์„œ ์ž์‹ ์˜ ๋กœ์ปฌ ๋ฒ„ํผ์— ์ €์žฅํ•œ๋‹ค.
  4. ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ๋””์Šคํฌ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ CPU์—๊ฒŒ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ์ž…์ถœ๋ ฅ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์—ˆ์Œ์„ ํ†ต์ง€ํ•œ๋‹ค.

ํ†ต์ƒ์ ์œผ๋กœ ์‹œ์Šคํ…œ ์ฝœ์€ ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ๊ธฐ๋Šฅ์œผ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ๋‹ค. ๊ฐ ์‹œ์Šคํ…œ ์ฝœ์—๋Š” ๋ฒˆํ˜ธ๊ฐ€ ํ• ๋‹น๋˜๊ณ  ์‹œ์Šคํ…œ ์ฝœ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ด๋Ÿฌํ•œ ๋ฒˆํ˜ธ์— ๋”ฐ๋ผ ์ธ๋ฑ์Šค๋˜๋Š” ํ…Œ์ด๋ธ”์„ ์œ ์ง€ํ•œ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์€ open() ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ, ์šด์˜์ฒด์ œ์—์„œ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋Š”์ง€๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

 

ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด๋‚˜ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์‹œ์Šคํ…œ ์ฝœ์ด ๋ฐœ์ƒํ•  ๋•Œ, ์ข€ ๋” ๋งŽ์€ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์šด์˜์ฒด์ œ์— ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋Œ€๋žต 3๊ฐ€์ง€ ์ •๋„์˜ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

  1. ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ CPU ๋ ˆ์ง€์Šคํ„ฐ ๋‚ด์— ์ „๋‹ฌํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ์— ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐฏ์ˆ˜๊ฐ€ CPU ๋‚ด์˜ ๋ ˆ์ง€์Šคํ„ฐ ๊ฐฏ์ˆ˜๋ณด๋‹ค ๋งŽ์„ ์ˆ˜ ์žˆ๋‹ค.
  2. ์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์— ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๊ฐ€ ๋ ˆ์ง€์Šคํ„ฐ์— ์ „๋‹ฌ๋œ๋‹ค. (์•„๋ž˜ ๊ทธ๋ฆผ ์ฐธ๊ณ )
  3. ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์— ์˜ํ•ด ์Šคํƒ์œผ๋กœ ์ „๋‹ฌ๋  ์ˆ˜๋„ ์žˆ๋‹ค.\

* 2,3๋ฒˆ์€ ์ „๋‹ฌ๋˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐฏ์ˆ˜๋‚˜ ๊ธธ์ด์— ์ œํ•œ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ช‡๋ช‡ ์šด์˜์ฒด์ œ์—์„œ ์„ ํ˜ธํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

 

 

 

 

โœ” ์‹œ์Šคํ…œ ์ฝœ์˜ ์œ ํ˜•


5๊ฐ€์ง€์˜ ๋ฒ”์ฃผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

  1. ํ”„๋กœ์„ธ์Šค ์ œ์–ด : ํ”„๋กœ์„ธ์Šค ํŠน๊ถŒ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ง์ ‘์ ์œผ๋กœ ํ”„๋กœ์„ธ์Šค ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅ
  2. ํŒŒ์ผ ์กฐ์ž‘ : ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œ, ๊ด€๋ฆฌ ๋“ฑ
  3. ์žฅ์น˜ ๊ด€๋ฆฌ : ์žฅ์น˜ ์š”๊ตฌ ๋ฐ ์žฅ์น˜ ํ•ด์ œ, ์ฝ๊ธฐ, ์“ฐ๊ธฐ, ์žฌ๋ฐฐ์น˜ ๋“ฑ
  4. ์ •๋ณด ์œ ์ง€ : ์‹œ๊ฐ„๊ณผ ๋‚ ์งœ์˜ ์„ค์ •๊ณผ ํš๋“, ์‹œ์Šคํ…œ ์ž๋ฃŒ์˜ ์„ค์ •๊ณผ ํš๋“
  5. ํ†ต์‹  : ํ†ต์‹  ์—ฐ๊ฒฐ์˜ ์ƒ์„ฑ ๋ฐ ์ œ๊ฑฐ, ๋ฉ”์‹œ์ง€์˜ ์†ก์ˆ˜์‹ , ์ƒํƒœ ์ •๋ณด ์ „๋‹ฌ ๋“ฑ

 

 


Reference.

link1 link2 

์›น

WWW world wide web์˜ ์•ฝ์ž

์ธํ„ฐ๋„ท์„ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด ๊ณต๊ฐ„
URL๋กœ ๋ฌธ์„œ๋“ฑ ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•˜๊ณ , ๋ฆฌ์†Œ์Šค ๊ฐ„ ํ•˜์ดํผ๋งํฌ๋กœ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ๋‹ค

 

 

 

์›น ํ†ต์‹  


 

  • ํด๋ผ์ด์–ธํŠธ : ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋ฒ„์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ๋˜๋Š” ์„œ๋น„์Šค. ์›น ๋ธŒ๋ผ์šฐ์ €, ๋ชจ๋ฐ”์ผ ์•ฑ ๋“ฑ
  • ์„œ๋ฒ„ : ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์ •๋ณด๋‚˜ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ

 

 

 

 

 

 

 

 

์›น ํ†ต์‹  ๊ณผ์ •


 

  1. ์‚ฌ์šฉ์ž๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด URL์„ ์ž…๋ ฅํ•œ๋‹ค
  2. ์ž…๋ ฅ๋œ URL ์ค‘ ๋„๋ฉ”์ธ ๋„ค์ž„์„ DNS ์„œ๋ฒ„์—์„œ ๊ฒ€์ƒ‰ํ•œ๋‹ค
  3. DNS ์„œ๋ฒ„์—์„œ ํ•ด๋‹น ๋„๋ฉ”์ธ ๋„ค์ž„์— ํ•ด๋‹นํ•˜๋Š” IP ์ฃผ์†Œ๋ฅผ ์ฐพ์•„ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ URL ์ •๋ณด์™€ ํ•จ๊ป˜ ์ „๋‹ฌํ•œ๋‹ค
  4. ์›น ํŽ˜์ด์ง€ URL ์ •๋ณด์™€ ์ „๋‹ฌ๋ฐ›์€ IP ์ฃผ์†Œ๋ฅผ ์ด์šฉํ•ด HTTP ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•œ๋‹ค
  5. ์š”์ฒญ์€ TCP๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„๋กœ ์ „์†ก๋œ๋‹ค
  6. ์„œ๋ฒ„๋Š” ํด๋ผ์ด์ด๋„ˆํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›๊ณ  ์‘๋‹ต์„ ์ „์†กํ•œ๋‹ค

 

 

 

 

 

 

 

 

 

 

 

DNS์˜ ์›น/์•ฑ ๋ผ์šฐํŒ… ๊ณผ์ •


 

  1. ์‚ฌ์šฉ์ž๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ € ์ฃผ์†Œ์ฐฝ์— www.example.com์„ ์ž…๋ ฅ
  2. www.example.com์— ๋Œ€ํ•œ ์š”์ฒญ์ด ์ธํ„ฐ๋„ท ์„œ๋น„์Šค ์ œ๊ณต์—…์ฒด(ISP)๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” DNS ํ•ด์„๊ธฐ๋กœ ๋ผ์šฐํŒ…
  3. DNS ํ•ด์„๊ธฐ๋Š” ์š”์ฒญ์„ DNS ๋ฃจํŠธ ์ด๋ฆ„ ์„œ๋ฒ„์— ์ „๋‹ฌ
  4. DNS ํ•ด์„๊ธฐ๋Š” ์š”์ฒญ์„ .com ๋„๋ฉ”์ธ TLD(Top-level Domain) ๋„ค์ž„ ์„œ๋ฒ„ ์ค‘ ํ•˜๋‚˜์— ๋‹ค์‹œ ์ „๋‹ฌ
  5. DNS ํ•ด์„๊ธฐ๋Š” ์š”์ฒญ์„ Route 53 ๋„ค์ž„ ์„œ๋ฒ„์— ๋‹ค์‹œ ์ „๋‹ฌ
  6. Route 53 ๋„ค์ž„ ์„œ๋ฒ„๋Š” www.example.com ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ์•„ IP์ฃผ์†Œ๋ฅผ DNS ํ•ด์„๊ธฐ๋กœ ๋ฐ˜ํ™˜
  7. DNS ํ•ด์„๊ธฐ๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์— IP์ฃผ์†Œ ๋ฐ˜ํ™˜

 

 

 

 

 

 

 

โ—์šฐ๋ฆฌ๊ฐ€ Chrome ์„ ์‹คํ–‰์‹œ์ผœ ์ฃผ์†Œ์ฐฝ์— ํŠน์ • URL ๊ฐ’์„ ์ž…๋ ฅ์‹œํ‚ค๋ฉด ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š”๊ฐ€?


in ๋ธŒ๋ผ์šฐ์ €

  1. url ์— ์ž…๋ ฅ๋œ ๊ฐ’์„ ๋ธŒ๋ผ์šฐ์ € ๋‚ด๋ถ€์—์„œ ๊ฒฐ์ •๋œ ๊ทœ์น™์— ๋”ฐ๋ผ ๊ทธ ์˜๋ฏธ๋ฅผ ์กฐ์‚ฌํ•œ๋‹ค.
  2. ์กฐ์‚ฌ๋œ ์˜๋ฏธ์— ๋”ฐ๋ผ HTTP Request ๋ฉ”์‹œ์ง€๋ฅผ ๋งŒ๋“ ๋‹ค.
  3. ๋งŒ๋“ค์–ด์ง„ ๋ฉ”์‹œ์ง€๋ฅผ ์›น ์„œ๋ฒ„๋กœ ์ „์†กํ•œ๋‹ค.

์ด ๋•Œ ๋งŒ๋“ค์–ด์ง„ ๋ฉ”์‹œ์ง€ ์ „์†ก์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ง์ ‘ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋„คํŠธ์›Œํฌ์— ์†ก์ถœํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์—†์œผ๋ฏ€๋กœ OS์— ์˜๋ขฐํ•˜์—ฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํƒ๋ฐฐ๋ฅผ ๋ณด๋‚ผ ๋•Œ ์ง์ ‘ ๋ณด๋‚ด๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, ์ด๋ฏธ ์„œ๋น„์Šค๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ณ  ์žˆ๋Š” ํƒ๋ฐฐ ์‹œ์Šคํ…œ(ํƒ๋ฐฐ ํšŒ์‚ฌ)์„ ์ด์šฉํ•˜์—ฌ ๋ณด๋‚ด๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ด์น˜์ด๋‹ค. ๋‹จ, OS์— ์†ก์‹ ์„ ์˜๋ขฐํ•  ๋•Œ๋Š” ๋„๋ฉ”์ธ๋ช…์ด ์•„๋‹ˆ๋ผ ip์ฃผ์†Œ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์„ ์ƒ๋Œ€๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด ๊ณผ์ •์—์„œ DNS์„œ๋ฒ„๋ฅผ ์กฐํšŒํ•ด์•ผ ํ•œ๋‹ค.

 

 

 

in ํ”„๋กœํ† ์ฝœ ์Šคํƒ, LAN ์–ด๋Œ‘ํ„ฐ

  1. ํ”„๋กœํ† ์ฝœ ์Šคํƒ(์šด์˜์ฒด์ œ์— ๋‚ด์žฅ๋œ ๋„คํŠธ์›Œํฌ ์ œ์–ด์šฉ ์†Œํ”„ํŠธ์›จ์–ด)์ด ๋ธŒ๋ผ์šฐ์ €๋กœ๋ถ€ํ„ฐ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๋Š”๋‹ค.
  2. ๋ธŒ๋ผ์šฐ์ €๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ฉ”์‹œ์ง€๋ฅผ ํŒจํ‚ท ์†์— ์ €์žฅํ•œ๋‹ค.
  3. ๊ทธ๋ฆฌ๊ณ  ์ˆ˜์‹ ์ฒ˜ ์ฃผ์†Œ ๋“ฑ์˜ ์ œ์–ด์ •๋ณด๋ฅผ ๋ง๋ถ™์ธ๋‹ค.
  4. ๊ทธ๋Ÿฐ ๋‹ค์Œ, ํŒจํ‚ท์„ LAN ์–ด๋Œ‘ํ„ฐ์— ๋„˜๊ธด๋‹ค.
  5. LAN ์–ด๋Œ‘ํ„ฐ๋Š” ๋‹ค์Œ Hop์˜ MAC์ฃผ์†Œ๋ฅผ ๋ถ™์ธ ํ”„๋ ˆ์ž„์„ ์ „๊ธฐ์‹ ํ˜ธ๋กœ ๋ณ€ํ™˜์‹œํ‚จ๋‹ค.
  6. ์‹ ํ˜ธ๋ฅผ LAN ์ผ€์ด๋ธ”์— ์†ก์ถœ์‹œํ‚จ๋‹ค.

ํ”„๋กœํ† ์ฝœ ์Šคํƒ์€ ํ†ต์‹  ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ์ด ์ œ์–ด ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ ์ณ ๋ณด๋‚ด๊ฑฐ๋‚˜, ๊ฐ์ข… ์ƒํ™ฉ์„ ์กฐ์ ˆํ•˜๋Š” ๋“ฑ ๋‹ค์–‘ํ•œ ์—ญํ• ์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ๋„คํŠธ์›Œํฌ ์„ธ๊ณ„์—์„œ๋Š” ๋น„์„œ๊ฐ€ ์žˆ์–ด์„œ ์šฐ๋ฆฌ๊ฐ€ ๋น„์„œ์—๊ฒŒ ๋ฌผ๊ฑด๋งŒ ๊ฑด๋„ค์ฃผ๋ฉด, ๋ฐ›๋Š” ์‚ฌ๋žŒ์˜ ์ฃผ์†Œ์™€ ๊ฐ์ข… ์œ ์˜์‚ฌํ•ญ์„ ์จ์ค€๋‹ค! ์—ฌ๊ธฐ์„œ๋Š” ํ”„๋กœํ† ์ฝœ ์Šคํƒ์ด ๋น„์„œ์˜ ์—ญํ• ์„ ํ•œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

in ํ—ˆ๋ธŒ, ์Šค์œ„์น˜, ๋ผ์šฐํ„ฐ

  1. LAN ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์†ก์‹ ํ•œ ํ”„๋ ˆ์ž„์€ ์Šค์œ„์นญ ํ—ˆ๋ธŒ๋ฅผ ๊ฒฝ์œ ํ•˜์—ฌ ์ธํ„ฐ๋„ท ์ ‘์†์šฉ ๋ผ์šฐํ„ฐ์— ๋„์ฐฉํ•œ๋‹ค.
  2. ๋ผ์šฐํ„ฐ๋Š” ํŒจํ‚ท์„ ํ”„๋กœ๋ฐ”์ด๋”(ํ†ต์‹ ์‚ฌ)์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.
  3. ์ธํ„ฐ๋„ท์œผ๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

 

 

in ์•ก์„ธ์Šค ํšŒ์„ , ํ”„๋กœ๋ฐ”์ด๋”

  1. ํŒจํ‚ท์€ ์ธํ„ฐ๋„ท์˜ ์ž…๊ตฌ์— ์žˆ๋Š” ์•ก์„ธ์Šค ํšŒ์„ (ํ†ต์‹  ํšŒ์„ )์— ์˜ํ•ด POP(Point Of Presence, ํ†ต์‹ ์‚ฌ์šฉ ๋ผ์šฐํ„ฐ)๊นŒ์ง€ ์šด๋ฐ˜๋œ๋‹ค.
  2. POP ๋ฅผ ๊ฑฐ์ณ ์ธํ„ฐ๋„ท์˜ ํ•ต์‹ฌ๋ถ€๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.
  3. ์ˆ˜ ๋งŽ์€ ๊ณ ์† ๋ผ์šฐํ„ฐ๋“ค ์‚ฌ์ด๋กœ ํŒจํ‚ท์ด ๋ชฉ์ ์ง€๋ฅผ ํ–ฅํ•ด ํ˜๋Ÿฌ๊ฐ€๊ฒŒ ๋œ๋‹ค.

 

 

 

in ๋ฐฉํ™”๋ฒฝ, ์บ์‹œ์„œ๋ฒ„

  1. ํŒจํ‚ท์€ ์ธํ„ฐ๋„ท ํ•ต์‹ฌ๋ถ€๋ฅผ ํ†ต๊ณผํ•˜์—ฌ ์›น ์„œ๋ฒ„์ธก์˜ LAN ์— ๋„์ฐฉํ•œ๋‹ค.
  2. ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋˜ ๋ฐฉํ™”๋ฒฝ์ด ๋„์ฐฉํ•œ ํŒจํ‚ท์„ ๊ฒ€์‚ฌํ•œ๋‹ค.
  3. ํŒจํ‚ท์ด ์›น ์„œ๋ฒ„๊นŒ์ง€ ๊ฐ€์•ผํ•˜๋Š”์ง€ ๊ฐ€์ง€ ์•Š์•„๋„ ๋˜๋Š”์ง€๋ฅผ ํŒ๋‹จํ•˜๋Š” ์บ์‹œ์„œ๋ฒ„๊ฐ€ ์กด์žฌํ•œ๋‹ค.

๊ตณ์ด ์„œ๋ฒ„๊นŒ์ง€ ๊ฐ€์ง€ ์•Š์•„๋„ ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ณจ๋ผ๋‚ธ๋‹ค. ์•ก์„ธ์Šคํ•œ ํŽ˜์ด์ง€์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹œ์„œ๋ฒ„์— ์žˆ์œผ๋ฉด ์›น ์„œ๋ฒ„์— ์˜๋ขฐํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ๊ทธ ๊ฐ’์„ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค. ํŽ˜์ด์ง€์˜ ๋ฐ์ดํ„ฐ ์ค‘์— ๋‹ค์‹œ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์žˆ์œผ๋ฉด ์บ์‹œ ์„œ๋ฒ„์— ์ €์žฅ๋œ๋‹ค.

 

 

 

 

in ์›น ์„œ๋ฒ„

  1. ํŒจํ‚ท์ด ๋ฌผ๋ฆฌ์ ์ธ ์›น ์„œ๋ฒ„์— ๋„์ฐฉํ•˜๋ฉด ์›น ์„œ๋ฒ„์˜ ํ”„๋กœํ† ์ฝœ ์Šคํƒ์€ ํŒจํ‚ท์„ ์ถ”์ถœํ•˜์—ฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณต์›ํ•˜๊ณ  ์›น ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋„˜๊ธด๋‹ค.
  2. ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์€ ์›น ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์š”์ฒญ ๋ฉ”์‹œ์ง€์— ๋”ฐ๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ต ๋ฉ”์‹œ์ง€์— ๋„ฃ์–ด ํด๋ผ์ด์–ธํŠธ๋กœ ํšŒ์†กํ•œ๋‹ค.
  3. ์™”๋˜ ๋ฐฉ์‹๋Œ€๋กœ ์‘๋‹ต ๋ฉ”์‹œ์ง€๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌ๋œ๋‹ค.

 

 


Reference.

link1 link2 

ํŠธ๋žœ์žญ์…˜์ด๋ž€ 


ํŠธ๋žœ์žญ์…˜์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ˆ˜ํ–‰์ด ์ผ๋ จ์˜ ์ฒ˜๋ฆฌ ๋‹จ์œ„๋กœ ๋ฌถ์ด๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

์œ„ ๊ทธ๋ฆผ์€ ์™ผ์ชฝ ๊ณ„์ขŒ์˜ ๋ˆ์„ ์˜ค๋ฅธ์ชฝ ๊ณ„์ขŒ๋กœ ์ž…๊ธˆํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.
์ฒซ๋ฒˆ ์งธ์ฒ˜๋Ÿผ ์™ผ์ชฝ ๊ณ„์ขŒ์—์„œ ์ถœ๊ธˆ์ด ์„ฑ๊ณต๋˜๋ฉด ์˜ค๋ฅธ์ชฝ ๊ณ„์ขŒ๋กœ ์ž…๊ธˆ๋œ๋‹ค.
ATM์˜ ๋ฌธ์ œ๋กœ ์™ผ์ชฝ์—์„œ ์ถœ๊ธˆ์ด ๋˜๊ณ  ๋ช‡ ๋ถ„ ํ›„, ์ถœ๊ธˆ์ด ์ทจ์†Œ๋˜์—ˆ๋‹ค๊ณ  ํ•˜๋ฉด ๋‘๋ฒˆ์งธ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์˜ค๋ฅธ์ชฝ ๊ณ„์ขŒ์—๋„ ์ž…๊ธˆ์ด ๋˜์ง€ ์•Š์•„์•ผํ•œ๋‹ค.

๋งŒ์•ฝ ์ถœ๊ธˆ์€ ์ทจ์†Œ ๋˜์—ˆ๋Š”๋ฐ ์ž…๊ธˆ์ด ๋ผ๋ฒ„๋ฆฌ๋ฉด ํฐ ๊ธฐ๋Šฅ์ƒ์˜ ๋ฌธ์ œ์ธ ๊ฒƒ์ด๋‹ค.
์ด๋ ‡๊ฒŒ ์ผ๋ จ์˜ ์ฒ˜๋ฆฌ๊ฐ€ All or Nothing์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒƒ์ด ํŠธ๋žœ์žญ์…˜์ด๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณ€ํ™”์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—… ๋‹จ์œ„
  • ์ƒํƒœ๋ฅผ ๋ณ€ํ™” ์‹œํ‚จ๋‹ค =  SQL ์งˆ์˜์–ด๋ฅผ ํ†ตํ•ด DB์— ์ ‘๊ทผํ•œ๋‹ค 
    • SELECT INSERT DELETE UPDATE
  • ์ž‘์—… ๋‹จ์œ„ ---> ๋งŽ์€ SQL ๋ช…๋ น๋ฌธ๋“ค์„ ์‚ฌ๋žŒ์ด ์ •ํ•˜๋Š” ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ •ํ•˜๋Š” ๊ฒƒ
    •  ๊ฒŒ์‹œํŒ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๊ธ€์„ ์ž‘์„ฑํ•˜๊ณ  ์˜ฌ๋ฆฌ๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ํ›„ ๊ฒŒ์‹œํŒ์— ๋‹ค์‹œ ๋Œ์•„์˜ค๋ฉด ๊ฒŒ์‹œํŒ์— ๋‚ด๊ฐ€ ์“ด ๊ธ€์ด ์—…๋ฐ์ดํŠธ๋œ ์ƒํƒœ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
      • ์ด๋•Œ DB ์ž‘์—…
        • ์˜ฌ๋ฆฌ๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ๋‹ค. : INSERT๋ฌธ์„ ์‚ฌ์šฉํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฒŒ์‹œ๊ธ€ ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊น€.
        • ๊ฒŒ์‹œํŒ ์ƒˆ๋กœ ๊ตฌ์„ฑ : SELECT๋ฌธ์„ ์‚ฌ์šฉํ•ด ์ตœ์‹  ์ •๋ณด๋ฅผ ์œ ์ง€.
      • ํ˜„์žฌ ์ž‘์—… ๋‹จ์œ„  INSERT ๋ฌธ + SELECT ๋ฌธ -----------> ์ด๋ฅผ ํ†ตํ‹€์–ด ํ•˜๋‚˜์˜ tranaction์ด๋ผ ํ•œ๋‹ค!

์ฆ‰. ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜ ์„ค๊ณ„๋ฅผ ์ž˜ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ๋งŽ์€ ์ด์ ์„ ์ค€๋‹ค.

 

์ž‘์—…์˜ ์™„์ „์„ฑ ์„ ๋ณด์žฅํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, ๋…ผ๋ฆฌ์ ์ธ ์ž‘์—… ์…‹์„ ๋ชจ๋‘ ์™„๋ฒฝํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋˜๋Š” ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•  ๊ฒฝ์šฐ์—๋Š” ์› ์ƒํƒœ๋กœ ๋ณต๊ตฌํ•ด์„œ ์ž‘์—…์˜ ์ผ๋ถ€๋งŒ ์ ์šฉ๋˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ์‚ฌ์šฉ์ž์˜ ์ž…์žฅ์—์„œ๋Š” ์ž‘์—…์˜ ๋…ผ๋ฆฌ์  ๋‹จ์œ„๋กœ ์ดํ•ด๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ณ  ์‹œ์Šคํ…œ์˜ ์ž…์žฅ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ์ ‘๊ทผ ๋˜๋Š” ๋ณ€๊ฒฝํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ๋‹จ์œ„๊ฐ€ ๋œ๋‹ค.

 

 

 

 

 

ํŠธ๋žœ์žญ์…˜์˜ Commit, Rollback ์—ฐ์‚ฐ


Commit

 ์ด๋ž€ ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ๋๋‚ฌ๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ผ๊ด€์„ฑ์žˆ๋Š” ์ƒํƒœ์— ์žˆ์„ ๋•Œ, ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์ด ๋๋‚ฌ๋‹ค๋ผ๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ฃผ๊ธฐ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์—ฐ์‚ฐ์ด๋‹ค.

์ด ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ˆ˜ํ–‰ํ–ˆ๋˜ ํŠธ๋žœ์žญ์…˜์ด ๋กœ๊ทธ์— ์ €์žฅ๋˜๋ฉฐ, ํ›„์— Rollback ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ–ˆ์—ˆ๋˜ ํŠธ๋žœ์žญ์…˜๋‹จ์œ„๋กœ ํ•˜๋Š”๊ฒƒ์„ ๋„์™€์ค€๋‹ค.

 

 

Rollback

์ด๋ž€ ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๊ฐ€ ๋น„์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋˜์–ด ํŠธ๋žœ์žญ์…˜์˜ ์›์ž์„ฑ์ด ๊นจ์ง„๊ฒฝ์šฐ, ํŠธ๋žœ์žญ์…˜์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜, ํŠธ๋žœ์žญ์…˜์˜ ๋ถ€๋ถ„์ ์œผ๋กœ๋งŒ ์—ฐ์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ์ทจ์†Œ์‹œํ‚จ๋‹ค.

ํ›„์— ์‚ฌ์šฉ์ž๊ฐ€ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋œ ๋‹จ์œ„๋Œ€๋กœ Rollback์„ ์ง„ํ–‰ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

 

 

 

ํŠธ๋žœ์žญ์…˜ ํŠน์ง• ACID


ACID 4๊ฐ€์ง€ ํŠน์„ฑ์„ ๋งŒ์กฑํ•ด์•ผํ•œ๋‹ค.

 

1. ์›์ž์„ฑ(Atomicity)

๋งŒ์•ฝ ํŠธ๋žœ์žญ์…˜ ์ค‘๊ฐ„์— ์–ด๋– ํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ํŠธ๋žœ์žญ์…˜์— ํ•ด๋‹นํ•˜๋Š” ์–ด๋– ํ•œ ์ž‘์—… ๋‚ด์šฉ๋„ ์ˆ˜ํ–‰๋˜์–ด์„œ๋Š” ์•ˆ๋˜๋ฉฐ ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ๋˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ์—๋งŒ ๋ชจ๋“  ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค.

 

2. ์ผ๊ด€์„ฑ(Consistency)

ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋œ ๋‹ค์Œ์˜ ์ƒํƒœ์—์„œ๋„ ํŠธ๋žœ์žญ์…˜์ด ์ผ์–ด๋‚˜๊ธฐ ์ „์˜ ์ƒํ™ฉ๊ณผ ๋™์ผํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•ด์•ผ ํ•œ๋‹ค.

 

3. ๊ณ ๋ฆฝ์„ฑ(Isolation)

๊ฐ๊ฐ์˜ ํŠธ๋žœ์žญ์…˜์€ ์„œ๋กœ ๊ฐ„์„ญ์—†์ด ๋…๋ฆฝ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค.

 

4. ์ง€์†์„ฑ(Durability)

ํŠธ๋žœ์žญ์…˜์ด ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋œ ๋‹ค์Œ์—๋Š” ์˜๊ตฌ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ž‘์—…์˜ ๊ฒฐ๊ณผ๊ฐ€ ์ €์žฅ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

 

 

 

 

ํŠธ๋žœ์žญ์…˜์˜ ์ƒํƒœ


 

Active

ํŠธ๋žœ์žญ์…˜์˜ ํ™œ๋™ ์ƒํƒœ. ํŠธ๋žœ์žญ์…˜์ด ์‹คํ–‰์ค‘์ด๋ฉฐ ๋™์ž‘์ค‘์ธ ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

 

Failed

ํŠธ๋žœ์žญ์…˜ ์‹คํŒจ ์ƒํƒœ. ํŠธ๋žœ์žญ์…˜์ด ๋”์ด์ƒ ์ •์ƒ์ ์œผ๋กœ ์ง„ํ–‰ ํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

 

Partially Committed

ํŠธ๋žœ์žญ์…˜์˜ Commit ๋ช…๋ น์ด ๋„์ฐฉํ•œ ์ƒํƒœ. ํŠธ๋žœ์žญ์…˜์˜ commit์ด์ „ sql๋ฌธ์ด ์ˆ˜ํ–‰๋˜๊ณ  commit๋งŒ ๋‚จ์€ ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

 

Committed

ํŠธ๋žœ์žญ์…˜ ์™„๋ฃŒ ์ƒํƒœ. ํŠธ๋žœ์žญ์…˜์ด ์ •์ƒ์ ์œผ๋กœ ์™„๋ฃŒ๋œ ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

 

Aborted

ํŠธ๋žœ์žญ์…˜์ด ์ทจ์†Œ ์ƒํƒœ. ํŠธ๋žœ์žญ์…˜์ด ์ทจ์†Œ๋˜๊ณ  ํŠธ๋žœ์žญ์…˜ ์‹คํ–‰ ์ด์ „ ๋ฐ์ดํ„ฐ๋กœ ๋Œ์•„๊ฐ„ ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

 

Partially Committed ์™€ Committed ์˜ ์ฐจ์ด์ 

Commit ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์ƒํƒœ๋Š” Partial Commited ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. ์ดํ›„ Commit์„ ๋ฌธ์ œ์—†์ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉดCommitted ์ƒํƒœ๋กœ ์ „์ด๋˜๊ณ , ๋งŒ์•ฝ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด Failed ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

์ฆ‰, Partial Commited๋Š” Commit ์š”์ฒญ์ด ๋“ค์–ด์™”์„๋•Œ๋ฅผ ๋งํ•˜๋ฉฐ, Commited๋Š” Commit์„ ์ •์ƒ์ ์œผ๋กœ ์™„๋ฃŒํ•œ ์ƒํƒœ๋ฅผ ๋งํ•œ๋‹ค.

 

 

 

 

์ž ๊ธˆ


โ–  ์ž ๊ธˆ(Locking)์ด๋ž€ ?

- ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์ผํ•œ ์‹œ๊ฐ„์— ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

- ์ž ๊ธˆ์€ ํŠธ๋žœ์žญ์…˜์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋„๋ก ํ•จ์œผ๋กœ์จ ์†์‹ค๋œ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š”๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•˜๋ฉฐ ์ž๋™์œผ๋กœ ๋ฐœ์ƒํ•œ๋‹ค.

- ์ž ๊ธˆ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ผ๊ด€์„ฑ ์œ ์ง€์™€ ๋™์‹œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

 

 

 

 โ–  ๋ธ”๋กœํ‚น(Blocking)์ด๋ž€ ?

- ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์›์„ ์—‘์„ธ์Šคํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ด๋ฏธ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ทธ ์ž์›์„ ์ž ๊ทธ๊ณ  ์žˆ์–ด์„œ ๊ทธ ์ž ๊ธˆ์ด ํ’€๋ฆด ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ์ƒํ™ฉ์„ ๋งํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ฐจ๋‹จ์ด ์˜ค๋žซ๋™์•ˆ ์œ ์ง€๋  ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค.

 

 

 

โ–  ์ž ๊ธˆ ๊ด€๋ฆฌ

- ๊ต์ฐฉ์ƒํƒœ(Dead Locks) :

  * ํŠธ๋žœ์žญ์…˜ A๋Š” ํŠธ๋žœ์žญ์…˜ B๊ฐ€ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ž ๊ทธ๊ณ  ์žˆ์œผ๋ฉด์„œ ํŠธ๋žœ์žญ์…˜ B๊ฐ€ ์ž ๊ทธ๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ•œ๋‹ค.

  * ํŠธ๋žœ์žญ์…˜ B๋Š” ํŠธ๋žœ์žญ์…˜ A๊ฐ€ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ž ๊ทธ๊ณ  ์žˆ์œผ๋ฉด์„œ ํŠธ๋žœ์žญ์…˜ A๊ฐ€ ์ž ๊ทธ๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ•œ๋‹ค.

- MSSQL ํ•ด๊ฒฐ๋ฐฉ๋ฒ• : ํ•œ์ชฝ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œ๋กœ ์ข…๋ฃŒ(๋น„์šฉ์ด ์ ์€ ํŠธ๋žœ์žญ์…˜์˜ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œ ์ข…๋ฃŒํ•œ๋‹ค.)

- SET DEADLOCK_PRIORITY ๋ฌธ์„ ์‚ฌ์šฉํ•ด ๊ต์ฐฉ ์ƒํƒœ ๋ฐœ์ƒ ์‹œ ํŠธ๋žœ์žญ์…˜์˜ ์ค‘์š”๋„๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

- ์šฐ๋ฆฌ ํšŒ์‚ฌ์˜ ๊ฒฝ์šฐ sp_mon_blocking ํ”„๋กœ์‹œ์ €๋ฅผ ์ด์šฉํ•ด ๋ธ”๋กœํ‚น ์ƒํƒœ์ธ spid๋ฅผ ์ฐพ์•„๋‚ธ๋‹ค. ๋ธ”๋กœํ‚นํ•˜๊ณ  ์žˆ๋Š” spid ์„ธ์…˜์„ ์ฃฝ์ด๊ธฐ ์œ„ํ•ด ' kill [spid] ' ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•  ์ 


ํŠธ๋žœ์žญ์…˜์€ ๊ผญ ํ•„์š”ํ•œ ์ตœ์†Œ์˜ ์ฝ”๋“œ์—๋งŒ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์ฆ‰ ํŠธ๋žœ์žญ์…˜์˜ ๋ฒ”์œ„๋ฅผ ์ตœ์†Œํ™”ํ•˜๋ผ๋Š” ์˜๋ฏธ๋‹ค.

 

์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜์€ ๊ฐœ์ˆ˜๊ฐ€ ์ œํ•œ์ ์ด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๊ฐ ๋‹จ์œ„ ํ”„๋กœ๊ทธ๋žจ์ด ์ปค๋„ฅ์…˜์„ ์†Œ์œ ํ•˜๋Š” ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง„๋‹ค๋ฉด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์—ฌ์œ  ์ปค๋„ฅ์…˜์˜ ๊ฐœ์ˆ˜๋Š” ์ค„์–ด๋“ค๊ฒŒ ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋‹ค ์–ด๋Š ์ˆœ๊ฐ„์—๋Š” ๊ฐ ๋‹จ์œ„ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ปค๋„ฅ์…˜์„ ๊ฐ€์ ธ๊ฐ€๊ธฐ ์œ„ํ•ด ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

 

 

๊ต์ฐฉ์ƒํƒœ

๊ต์ฐฉ์ƒํƒœ๋ž€ ๋ฌด์—‡์ธ๊ฐ€
๋ณต์ˆ˜์˜ ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋ฉด ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ์ผ์–ด๋‚ ์ˆ˜ ์žˆ๋‹ค. ๊ต์ฐฉ์ƒํƒœ๋ž€ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํŠธ๋žœ์žญ์…˜์ด ํŠน์ • ์ž์›(ํ…Œ์ด๋ธ” ๋˜๋Š” ํ–‰)์˜ ์ž ๊ธˆ(Lock)์„ ํš๋“ํ•œ ์ฑ„ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์†Œ์œ ํ•˜๊ณ  ์žˆ๋Š” ์ž ๊ธˆ์„ ์š”๊ตฌํ•˜๋ฉด ์•„๋ฌด๋ฆฌ ๊ธฐ๋‹ค๋ ค๋„ ์ƒํ™ฉ์ด ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ์ƒํƒœ๊ฐ€ ๋˜๋Š”๋ฐ, ์ด๋ฅผ ๊ต์ฐฉ์ƒํƒœ๋ผ๊ณ  ํ•œ๋‹ค.

 

 

 

๊ต์ฐฉ์ƒํƒœ์˜ ๋นˆ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ๋ฐฉ๋ฒ•

  • ํŠธ๋žœ์žญ์…˜์„ ์ž์ฃผ ์ปค๋ฐ‹ํ•œ๋‹ค.
  • ์ •ํ•ด์ง„ ์ˆœ์„œ๋กœ ํ…Œ์ด๋ธ”์— ์ ‘๊ทผํ•œ๋‹ค. ์œ„์—์„œ ํŠธ๋žœ์žญ์…˜ 1 ์ด ํ…Œ์ด๋ธ” B -> A ์˜ ์ˆœ์œผ๋กœ ์ ‘๊ทผํ–ˆ๊ณ , ํŠธ๋žœ์žญ์…˜ 2 ๋Š” ํ…Œ์ด๋ธ” A -> B์˜ ์ˆœ์œผ๋กœ ์ ‘๊ทผํ–ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜๋“ค์ด ๋™์ผํ•œ ํ…Œ์ด๋ธ” ์ˆœ์œผ๋กœ ์ ‘๊ทผํ•˜๊ฒŒ ํ•œ๋‹ค.
  • ์ฝ๊ธฐ ์ž ๊ธˆ ํš๋“ (SELECT ~ FOR UPDATE)์˜ ์‚ฌ์šฉ์„ ํ”ผํ•œ๋‹ค.
  • ํ•œ ํ…Œ์ด๋ธ”์˜ ๋ณต์ˆ˜ ํ–‰์„ ๋ณต์ˆ˜์˜ ์—ฐ๊ฒฐ์—์„œ ์ˆœ์„œ ์—†์ด ๊ฐฑ์‹ ํ•˜๋ฉด ๊ต์ฐฉ์ƒํƒœ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๋‹ค, ์ด ๊ฒฝ์šฐ์—๋Š” ํ…Œ์ด๋ธ” ๋‹จ์œ„์˜ ์ž ๊ธˆ์„ ํš๋“ํ•ด ๊ฐฑ์‹ ์„ ์ง๋ ฌํ™” ํ•˜๋ฉด ๋™์‹œ์„ฑ์„ ๋–จ์–ด์ง€์ง€๋งŒ ๊ต์ฐฉ์ƒํƒœ๋ฅผ ํšŒํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.

 


Reference.

link1 link2 link3

์ฃผ๋ณ€์žฅ์น˜์™€ ์ž…์ถœ๋ ฅ ์žฅ์น˜๋Š” CPU๋‚˜ ๋ฉ”๋ชจ๋ฆฌ์™€ ๋‹ฌ๋ฆฌ ์ธํ„ฐ๋ŸฝํŠธ๋ผ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ๊ด€๋ฆฌ๋œ๋‹ค.

์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ํ•˜๋Š” ์ด์œ ๋Š”???
๊ทธ ์ด์œ ๋Š” ์ž…์ถœ๋ ฅ ์—ฐ์‚ฐ์ด CPU ๋ช…๋ น ์ˆ˜ํ–‰์†๋„๋ณด๋‹ค ํ˜„์ €ํžˆ ๋Š๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
CPU๋Š” ๋น„์‹ผ๋ฐ ์˜ค๋ž˜๊ฑธ๋ฆฌ๋Š” ์ž…์ถœ๋ ฅ ์—ฐ์‚ฐ์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ CPU๊ฐ€ ์‰ฌ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์—†์–ด์„œ
์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ ๊นŒ์ง€ ๋‹ค๋ฅธ ์ผ์„ ํ•˜๋ผ๊ณ  ์‹œํ‚ค๋Š” ๊ฒƒ์ธ๋ฐ,
์ž…์ถœ๋ ฅ์ด ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์‹œ CPU๋ฅผ ๋ถˆ๋Ÿฌ์™€ ํ•ด๋‹น ์ž‘์—…์„ ์ด์–ด๊ฐ€๊ฒŒ ํ•œ๋‹ค.

์ด๋•Œ CPU์—๊ฒŒ ์™„๋ฃŒ๋˜์—ˆ์Œ์„ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด ์ธํ„ฐ๋ŸฝํŠธ์ด๋‹ค.

 

- ํ•˜๋“œ์›จ์–ด ์žฅ์น˜๊ฐ€ CPU์—๊ฒŒ ์–ด๋–ค ์‚ฌ์‹ค์„ ์•Œ๋ ค์ฃผ๊ฑฐ๋‚˜ CPU์˜ ์„œ๋น„์Šค๋ฅผ ์š”์ฒญํ•ด์•ผ ํ•  ๊ฒฝ์šฐ, CPU ๋‚ด์— ์žˆ๋Š” ์ธํ„ฐ๋ŸฝํŠธ ๋ผ์ธ์„ ์„ธํŒ…ํ•˜์—ฌ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. (ํ”„๋กœ๊ทธ๋žจ์ด ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” CPU๋ฅผ ํ• ๋‹น๋ฐ›์•„์•ผ ํ•จ)

- CPU๋Š” ๋งค๋ฒˆ ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌ๊ณ  ์žˆ๋Š” ๊ณณ์˜ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•œ ๋’ค, ๋‹ค์Œ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ง์ „์— ์ธํ„ฐ๋ŸฝํŠธ ๋ผ์ธ์ด ์„ธํŒ…๋˜์—ˆ๋Š”์ง€ ์ฒดํฌํ•œ๋‹ค.

- ์ด๋ฅผ ํ†ตํ•ด ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์œผ๋ฉด CPU๋Š” ํ˜„์žฌ ์ˆ˜ํ–‰ ์ค‘์ด๋˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฉˆ์ถ”๊ณ  ์šด์˜ ์ฒด์ œ์˜ ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ ๋ฃจํ‹ด์œผ๋กœ ์ด๋™ํ•˜์—ฌ ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

์ธํ„ฐ๋ŸฝํŠธ๋Š” ํฌ๊ฒŒ ํ•˜๋“œ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ์™€ ์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ๋กœ ๋‚˜๋‰˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. 

 

 

 

 

 

 

ํ•˜๋“œ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ


  • ์ผ๋ฐ˜์ ์ธ ์ธํ„ฐ๋ŸฝํŠธ
  • ํ•˜๋“œ์›จ์–ด ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ CPU์˜ ์„œ๋น„์Šค๋ฅผ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์ธํ„ฐ๋ŸฝํŠธ

 

ํ•˜๋“œ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ

1. ๊ธฐ๊ณ„๊ฒ€์‚ฌ ์ธํ„ฐ๋ŸฝํŠธ

      - ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๋„์ค‘ ๊ฐ‘์ž‘์Šค๋Ÿฐ ์ •์ „์ด๋‚˜ ์ปดํ“จํ„ฐ ์ž์ฒด ๋‚ด์—์„œ ๊ธฐ๊ณ„์ ์ธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ

2. ์™ธ๋ถ€ ์ธํ„ฐ๋ŸฝํŠธ

      - ์˜คํผ๋ ˆ์ดํ„ฐ๋‚˜ ํƒ€์ด๋จธ์— ์˜ํ•ด ์˜๋„์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ์ค‘๋‹จ๋œ ๊ฒฝ์šฐ

3. ์ž…์ถœ๋ ฅ ์ธํ„ฐ๋ŸฝํŠธ 

      - ์ž…์ถœ๋ ฅ์˜ ์ข…๋ฃŒ๋‚˜ ์ž…์ถœ๋ ฅ์˜ ์˜ค๋ฅ˜์— ์˜ํ•ด CPU์˜ ๊ธฐ๋Šฅ์ด ์š”์ฒญ๋˜๋Š” ๊ฒฝ์šฐ

4. ํ”„๋กœ๊ทธ๋žจ๊ฒ€์‚ฌ ์ธํ„ฐ๋ŸฝํŠธ 

      - ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ๋ณดํ˜ธ๋œ ๊ธฐ์–ต๊ณต๊ฐ„ ๋‚ด์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ๋ถˆ๋ฒ•์ ์ธ ๋ช…๋ น ์ˆ˜ํ–‰๊ณผ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ

 

 

 

 

์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ


  • ์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ๋Š” ์™ธ๋ถ€๊ฐ€ ์•„๋‹Œ CPU ๋‚ด๋ถ€์—์„œ ์ž์‹ ์ด ์‹คํ–‰ํ•œ ๋ช…๋ น์ด๋‚˜ CPU์˜ ๋ช…๋ น ์‹คํ–‰์— ๊ด€๋ จ๋œ ๋ชจ๋“ˆ์ด ๋ณ€ํ™”ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒ
  • ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ํ”„๋กœ๊ทธ๋žจ ์ƒ์˜ ์ฒ˜๋ฆฌ ๋ถˆ๊ฐ€๋Šฅํ•œ ์˜ค๋ฅ˜๋‚˜ ์ด๋ฒคํŠธ๋ฅผ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•œ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์ด๋ฅผ ํŠธ๋žฉ ๋˜๋Š” ์˜ˆ์™ธ๋ผ ๋ถ€๋ฅธ๋‹ค.
  • ๋˜ํ•œ ํ”„๋กœ๊ทธ๋žจ ๋‚ด์—์„œ ํŠน๋ณ„ํ•œ ์„œ๋น„์Šค๋ฅผ ์š”๊ตฌํ•˜๊ฑฐ๋‚˜
  • ๊ฐ์‹œ๋ฅผ ๋ชฉ์ ์œผ๋กœ, ์˜๋„์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฐœ์ƒ์‹œํ‚จ ํŠน๋ณ„ํ•œ ๋ช…๋ น์–ด์— ์˜ํ•ด ๋ฐœ์ƒ๋˜๊ธฐ๋„ ํ•œ๋‹ค.

1. ์˜ˆ์™ธ ์ƒํ™ฉ(Exception)

  • ํ”„๋กœ๊ทธ๋žจ์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š์€ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ  ํ•  ๋•Œ, ์ž๋™์ ์œผ๋กœ ๋ฐœ์ƒํ•œ๋‹ค. ์šด์˜์ฒด์ œ๋Š” ์˜ˆ์™ธ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, CPU์˜ ์ œ์–ด๊ถŒ์„ ํš๋“ํ•ด ์ด ์ƒํ™ฉ์— ๋Œ€ํ•œ ์กฐ์น˜๋ฅผ ์ทจํ•œ๋‹ค.
  • ex) 0์œผ๋กœ ๋‚˜๋ˆ„๋Š” ์—ฐ์‚ฐ, ์ž์‹ ์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๋„˜์–ด์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฐธ์กฐ ๋“ฑ
  • ์˜ˆ์™ธ ์ƒํ™ฉ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ๋ฃจํ‹ด์„ ์ž์‹ ์˜ ์ฝ”๋“œ ์˜์—ญ์— ๊ฐ€์ง€๊ณ  ์žˆ์Œ

2. ์‹œ์Šคํ…œ ์ฝœ(System Call)

  • ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค๊ฐ€ ์šด์˜์ฒด์ œ์˜ ์„œ๋น„์Šค๋ฅผ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด ์ปค๋„์˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ง์ ‘ ํŠน๊ถŒ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ํŠน๊ถŒ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜๋ ค ํ•  ๋•Œ, ์‹œ์Šคํ…œ ์ฝœ์„ ์‚ฌ์šฉํ•œ๋‹ค.
์‹œ์Šคํ…œ ์ฝœ์ด๋‚˜ ์˜ˆ์™ธ ์ƒํ™ฉ์€ ๋ชจ๋‘ ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค๋กœ๋ถ€ํ„ฐ CPU์˜ ์ œ์–ด๊ถŒ์ด ์šด์˜ ์ฒด์ œ์—๊ฒŒ ์ด์–‘๋˜์–ด ์ฒ˜๋ฆฌ๋˜๋Š”๋ฐ ์ด ๊ณผ์ •์— ์ธํ„ฐ๋ŸฝํŠธ ๋ผ์ธ์„ ์„ธํŒ…ํ•˜์—ฌ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ํ›„ ์ œ์–ด๊ถŒ์ด ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜๋ฏ€๋กœ ์ด๋“ค๋„ ๋„“์€ ์˜๋ฏธ์—์„œ๋Š” ์ธํ„ฐ๋ŸฝํŠธ์˜ ๋ฒ”์ฃผ์— ํฌํ•จ์‹œํ‚จ๋‹ค. 
๋‹จ์ง€ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์ฃผ์ฒด๊ฐ€ ํ•˜๋“œ์›จ์–ด ์žฅ์น˜๊ฐ€ ์•„๋‹Œ ์†Œํ”„ํŠธ์›จ์–ด์ด๋ฏ€๋กœ ์ด๋“ค์„ ์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

 

 

 

 

์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ ์ฒ˜๋ฆฌ ๊ณผ์ •


A ํ”„๋กœ๊ทธ๋žจ์ด CPU๋ฅผ ํ• ๋‹น๋ฐ›๊ณ  ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด A๋Š” ํ˜„์žฌ ์ˆ˜ํ–‰์ค‘์ธ ๋ช…๋ น์˜ ์œ„์น˜๋ฅผ ์ €์žฅํ•ด๋†“๋Š”๋‹ค. ๊ทธ ํ›„, ์šด์˜ ์ฒด์ œ ๋‚ด๋ถ€ ์ฝ”๋“œ์ธ ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ ๋ฃจํ‹ด์œผ๋กœ ๋„˜์–ด๊ฐ€์„œ ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ  ๋‹ค์‹œ ๋Œ์•„์™€ A์˜ ์ด์ „ ์ž‘์—… ์ง€์ ๋ถ€ํ„ฐ ์ˆ˜ํ–‰์„ ๊ณ„์† ์ด์–ด๋‚˜๊ฐ€๊ฒŒ ๋œ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด, ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ˆ˜ํ–‰์ค‘์ด๋˜ ํ”„๋กœ์„ธ์Šค์˜ ์ •๋ณด๋Š” ์–ด๋””์— ์ €์žฅ๋ ๊นŒ?

 

-> ์ง„ํ–‰ ์ค‘์ด๋˜ A ํ”„๋กœ์„ธ์Šค์˜ ์ •๋ณด๋Š” ํ”„๋กœ์„ธ์Šค ์ œ์–ด ๋ธ”๋ก(PCB: Process Control Block)์— ์ €์žฅํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ๋ฅผ ๋ชจ๋‘ ๋งˆ์น˜๋ฉด ํ”„๋กœ๊ทธ๋žจ A์˜ PCB์— ์ €์žฅ๋œ ์ฃผ์†Œ๋ฅผ ๋ณต์›์‹œ์ผœ ์›๋ž˜ ์ˆ˜ํ–‰ํ•˜๋˜ ์ผ์„ ์žฌ๊ฐœํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

์ธํ„ฐ๋ŸฝํŠธ ๋ฒกํ„ฐ 

  • ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ธํ„ฐ๋ŸฝํŠธ์— ๋Œ€ํ•ด ํ•ด๋‹น ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ์‹œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋ฃจํ‹ด์˜ ์ฃผ์†Œ๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ์žˆ๋Š” ํ…Œ์ด๋ธ”.
  • ์ผ์ข…์˜ ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ

 

์ธํ„ฐ๋ŸฝํŠธ ํ•ธ๋“ค๋Ÿฌ

  • ์‹ค์ œ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฃจํ‹ด์œผ๋กœ ์ธํ„ฐ๋ŸฝํŠธ ์„œ๋น„์Šค ๋ฃจํ‹ด์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.
  • ์šด์˜์ฒด์ œ ์ฝ”๋“œ ๋ถ€๋ถ„์—๋Š” ๊ฐ์ข… ์ธํ„ฐ๋ŸฝํŠธ ๋ณ„๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋‚ด์šฉ์ด ์ด๋ฏธ ํ”„๋กœ๊ทธ๋žจ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด ๋ถ€๋ถ„์„ ์ธํ„ฐ๋ŸฝํŠธ ์„œ๋น„์Šค ๋ฃจํ‹ด ๋˜๋Š” ์ธํ„ฐ๋ŸฝํŠธ ํ•ธ๋“ค๋Ÿฌ๋ผ๊ณ  ํ•œ๋‹ค.

 

PCB

  • ์ปค๋„์˜ ๋ฐ์ดํ„ฐ ์˜์—ญ์— ์กด์žฌํ•˜๋ฉฐ ๊ฐ๊ฐ์˜ ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ๊ณ ์œ ์˜ PCB๊ฐ€ ์žˆ๋‹ค.
  • ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ ์‹œ ํ”„๋กœ์„ธ์Šค์˜ ์–ด๋Š ๋ถ€๋ถ„์ด ์ˆ˜ํ–‰์ค‘์ด์—ˆ๋Š”์ง€๋ฅผ ์ €์žฅํ•œ๋‹ค.
    (์ˆ˜ํ–‰์ค‘์ด๋˜ memory ์ฃผ์†Œ, ๋ ˆ์ง€์Šคํ„ฐ๊ฐ’, ํ•˜๋“œ์›จ์–ด ์ƒํƒœ ...)

 

 

 


Reference.

link1 link2 link3 

Process Address Space
ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋˜๋Š” ๊ฒƒ

 

 

ํ”„๋กœ์„ธ์Šค๋Š” CPU์— ์˜ํ•ด์„œ ์‹คํ–‰์ด ๋˜๊ณ  memory์— ์ €์žฅ์ด ๋œ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋ฉด ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„์ด memory์— ํ• ๋‹น(์ƒ์„ฑ)๋˜๋Š”๋ฐ, ํ• ๋‹น ๋œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ฒƒ์€ CPU๊ฐ€ ํ•œ๋‹ค.

๊ตฌ์„ฑ์š”์†Œ

Address Space์•ˆ์€ ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด Code, Data, Stack ๋ถ€๋ถ„์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

 

1) Code(Text)

  • ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ๋“ค์–ด ๊ฐ€๋Š” ๋ถ€๋ถ„. ์ฆ‰, ์‹คํ–‰ํ•  ํ”„๋กœ๊ทธ๋žจ์˜ ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์œผ๋กœ ํ…์ŠคํŠธ(code)์˜์—ญ ์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.
  • ์ฝ”๋“œ์˜์—ญ์€ ์‹คํ–‰ ํŒŒ์ผ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ช…๋ น์–ด๋“ค์ด ์˜ฌ๋ผ๊ฐ€๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์œผ๋กœ ํ•จ์ˆ˜, ์ œ์–ด๋ฌธ, ์ƒ์ˆ˜ ๋“ฑ์ด ์—ฌ๊ธฐ์— ์ง€์ •๋œ๋‹ค.
  • ์ปดํŒŒ์ผ ํƒ€์ž„์— ๊ฒฐ์ •๋˜๊ณ  ์ค‘๊ฐ„์— ์ฝ”๋“œ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๊ฒŒ Read-Only ๋กœ ์ง€์ •๋ผ์žˆ๋‹ค.

2) Data

  • ํ”„๋กœ๊ทธ๋žจ์˜ **์ „์—ญ ๋ณ€์ˆ˜์™€ ์ •์ (static) ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ**์ด๋‹ค.์ฆ‰, ํ”„๋กœ๊ทธ๋žจ์ด ๊ตฌ๋™๋˜๋Š” ๋™์•ˆ ํ•ญ์ƒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ด๋‹ค.
  • ์ „์—ญ๋ณ€์ˆ˜, static ๊ฐ’์„ ์ฐธ์กฐํ•œ ์ฝ”๋“œ๋Š” ์ปดํŒŒ์ผ ํ•˜๊ณ  ๋‚˜๋ฉด Data ์˜์—ญ์˜ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€๋ฅดํ‚ค๋„๋ก ๋ฐ”๋€๋‹ค.
  • ๋ฐ์ดํ„ฐ ์˜์—ญ์€ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹œ์ž‘๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋˜๋ฉฐ, ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๋ฉด ์†Œ๋ฉธํ•œ๋‹ค.
  • ์‹คํ–‰ ์ค‘๋„์— ์ „์—ญ๋ณ€์ˆ˜๊ฐ€ ๋ณ€๊ฒฝ ๋  ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ ์ด ์˜์—ญ์€ Read-Write๋กœ ์ง€์ •๋ผ์žˆ๋‹ค.

(์ƒ์œ„ ๊ทธ๋ฆผ์—์„œ๋Š” ํ‘œํ˜„๋˜์–ด์žˆ์ง€ ์•Š์ง€๋งŒ,) ์ดˆ๊ธฐํ™” ๋œ ๋ฐ์ดํ„ฐ๋Š” Data ์˜์—ญ์— ์ €์žฅ๋˜๊ณ ,์ดˆ๊ธฐํ™” ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋Š” BSS(Block Stated Symbol)์˜์—ญ์— ์ €์žฅ๋œ๋‹ค.

Q.data์˜์—ญ๊ณผ bss ์˜์—ญ์„ ๊ตฌ๋ถ„ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€?
์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋•Œ ์˜์—ญ๋งŒ ์žก์•„์ฃผ๋ฉด ๋˜๊ณ  ๊ทธ ๊ฐ’์„ ํ”„๋กœ๊ทธ๋žจ์— ์ €์žฅํ•˜๊ณ  ์žˆ์„ ํ•„์š”๋Š” ์—†์œผ๋‚˜ ์ดˆ๊ธฐํ™”๊ฐ€ ๋˜๋Š” ๋ณ€์ˆ˜๋Š” ๊ทธ ๊ฐ’๋„ ํ”„๋กœ๊ทธ๋žจ์— ์ €์žฅํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ bss ์˜์—ญ ๋ณ€์ˆ˜๋“ค์ด ๋งŽ์•„์ ธ๋„ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰์ฝ”๋“œ ์‚ฌ์ด์ฆˆ๋ฅผ ๋Š˜๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.

 

3) Stack

  • ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๊ณผ ๊ด€๊ณ„๋˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ด๋‹ค.
  • Stack์€ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋˜๋ฉฐ, ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์ด ์™„๋ฃŒ๋˜๋ฉด ์†Œ๋ฉธํ•œ๋‹ค.
  • ์›์‹œํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ’๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋œ๋‹ค.
  • Heap ์˜์—ญ์— ์ƒ์„ฑ๋œ Object ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ ์ฐธ์กฐ๊ฐ’์ด ํ• ๋‹น๋œ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ์˜ ๋†’์€ ์ฃผ์†Œ์—์„œ ๋‚ฎ์€ ์ฃผ์†Œ์˜ ๋ฐฉํ–ฅ์œผ๋กœ ํ• ๋‹น๋œ๋‹ค.
  • ์ปดํŒŒ์ผ ํƒ€์ž„์— ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌดํ•œํžˆ ํ• ๋‹น ํ•  ์ˆ˜ ์—†๋‹ค. ์žฌ๊ท€ํ•จ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๊นŠ๊ฒŒ ํ˜ธ์ถœ๋˜๊ฑฐ๋‚˜ ํ•จ์ˆ˜๊ฐ€ ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ๊ฐ€์ง€๊ณ  ์žˆ์–ด stack ์˜์—ญ์„ ์ดˆ๊ณผํ•˜๋ฉด stack overflow ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.



Q. ์™œ Code ๋ถ€๋ถ„์„ ๋”ฐ๋กœ ๋‘์—ˆ๋‚˜?
Program์˜ Code๋Š” Program์ด ๋งŒ๋“ค์–ด์ง€๊ณ (์ปดํŒŒ์ผ๋˜๊ณ ) ๋‚˜์„œ๋Š” ๋ฐ”๋€” ์ผ์ด ์ „ํ˜€ ์—†๋‹ค. (๋”ฐ๋ผ์„œ Read Only)
๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œ์ผœ ๋ช‡ ๊ฐœ์˜ Prcess๊ฐ€ ์‹คํ–‰๋˜๋”๋ผ๋„ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋ฉด Code ๋ถ€๋ถ„์€ ๋‹ค ๋˜‘๊ฐ™์€ ๋‚ด์šฉ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ฒŒ ๋œ๋‹ค.
๋”ฐ๋ผ์„œ ๊ฐ™์€ Program์˜ Process์ผ ๊ฒฝ์šฐ Code ๋ถ€๋ถ„์„ ๊ณต์œ (Share)ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ด๋Š” ๋ชฉ์ ์ž…๋‹ˆ๋‹ค.
Q. ์™œ Stack ๋ถ€๋ถ„๊ณผ Data ๋ถ€๋ถ„์„ ๋‚˜๋ˆ„์—ˆ๋‚˜? 
Stack ๊ตฌ์กฐ๋Š” ์•„๋ž˜์˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. (ํ•˜๋‹จ ๋ถ€๊ฐ€ ๋ง‰ํ˜€์žˆ๊ณ  ์ƒ๋‹จ ๋ถ€๊ฐ€ ๋šซ๋ ค์žˆ๋Š” ๊ตฌ์กฐ)
๋”ฐ๋ผ์„œ ํ•œ ์ชฝ์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘์–ด ๋„ฃ์„ ์ˆ˜ ์žˆ๊ณ  ๊บผ๋‚ผ ๋•Œ๋Š” ์ตœ๊ทผ์— ์ง‘์–ด๋„ฃ์—ˆ๋˜ ๊ฒƒ ๋ถ€ํ„ฐ ๊บผ๋‚ผ ์ˆ˜ ๋ฐ–์— ์—†๋Š” ๊ตฌ์กฐ C์–ธ์–ด๋ฅผ ์˜ˆ๋กœ ๋“ค๋ฉด ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์ด stack ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
์ „์—ญ๋ณ€์ˆ˜๋Š” ์–ด๋–ค ํ•จ์ˆ˜์—์„œ๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Data๋กœ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•ด์ค€๋‹ค.

 

<stack ๊ตฌ์กฐ>

main ํ•จ์ˆ˜๋ถ€ํ„ฐ ์‹คํ–‰๋˜๋ฉฐ 

์ฒ˜์Œ printf๋ฅผ ์ˆ˜ํ–‰ํ•œ ๋’ค ํ•จ์ˆ˜ func1 ์‹คํ–‰

ํ•จ์ˆ˜ func1 ์‹คํ–‰ ํ›„ main ์—์„œ ๋‹ค์‹œ printf๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํ•จ์ˆ˜ func2 ์‹คํ–‰

tunc2์—์„œ printf๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  func3์‹คํ–‰

 

์ด๋Ÿฌํ•œ stack ๊ตฌ์กฐ๋กœ ์ธํ•ด data ๋ถ€๋ถ„๊ณผ stack ๋ถ€๋ถ„์„ ๋”ฐ๋กœ ๋‚˜๋ˆ„์–ด ๋‘” ๊ฒƒ์ด๋‹ค.
์ „์—ญ ๋ณ€์ˆ˜(global variables)๋Š” ์–ด๋–ค ํ•จ์ˆ˜์—์„œ๋„ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Data๋กœ ๋”ฐ๋กœ ๊ด€๋ฆฌ๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ

 

 


Reference.

link1 link2 link3

DNS๋ž€
Domain Name System


www.xxx.com ๊ณผ ๊ฐ™์ด ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์ด๋ฆ„์„
192.0.0.1 ๊ณผ ๊ฐ™์€ ์ˆซ์ž IP์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ
์ปดํ“จํ„ฐ๊ฐ€ ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์„œ๋ฒ„

 

  • DNS ์‹œ์Šคํ…œ์€ ์ด๋ฆ„์„ ์ˆซ์ž๋กœ ๋งคํ•‘ํ•˜์—ฌ ์ „ํ™”๋ฒˆํ˜ธ ๋ถ€์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•œ๋‹ค.
  • DNS ์„œ๋ฒ„๋Š” ์ด๋ฆ„์— ๋Œ€ํ•œ ์š”์ฒญ์„ IP ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ, ์ตœ์ข… ์‚ฌ์šฉ์ž๊ฐ€ ๋„๋ฉ”์ธ ์ด๋ฆ„์„ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ž…๋ ฅํ•  ๋•Œ ํ•ด๋‹น ์‚ฌ์šฉ์ž๋ฅผ ์–ด๋–ค ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•  ๊ฒƒ์ธ์ง€ ์ œ์–ดํ•œ๋‹ค. --> ์ด ์š”์ฒญ์„ ์ฟผ๋ฆฌ๋ผ๊ณ  ํ•œ๋‹ค.

DNS

1. DNS Query
    DNS ์„œ๋ฒ„์—์„œ domain name์„ ์ด์šฉํ•˜์—ฌ IP๋ฅผ ๋ฐ›์•„์˜จ๋‹ค
2. IP Communication
    IP๋ฅผ ๋ฐ›์•„์˜จ ์œ ์ €๋Š” ๋ฆฌํ€˜์ŠคํŠธ ๋ฉ”์„ธ์ง€ ๋ฐœ์†ก์„ ํ†ตํ•˜์—ฌ ์ •์ƒ์ ์œผ๋กœ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ์‹ค์‹œํ•œ๋‹ค

 


 

DNS ๋™์ž‘์›๋ฆฌ

1. ์‚ฌ์šฉ์ž๊ฐ€ www.naver.com ์„ ๋ธŒ๋ผ์šฐ์ €์— ์ž…๋ ฅํ•œ๋‹ค.
2. Local DNS์—๊ฒŒ IP ์ฃผ์†Œ๋ฅผ ์งˆ์˜ํ•˜์—ฌ ์บ์‹œ๋œ ๊ฒƒ์— ์—†์œผ๋ฉด ๋‹ค๋ฅธ DNS ์„œ๋ฒ„์— ์ „๋‹ฌ (Root DNS)
3. ROOT ๋กœ ๋ถ€ํ„ฐ com ๋„๋ฉ”์ธ์„ ๊ด€๋ฆฌํ•˜๋Š” TLD์ด๋ฆ„ ์„œ๋ฒ„ ์ •๋ณด ์ „๋‹ฌ ๋ฐ›๋Š”๋‹ค.
4. COM DNS๋กœ ์งˆ์˜ ํ•œ๋‹ค.
5. naver.com DNS ์ •๋ณด๋ฅผ ์ „๋‹ฌ ๋ฐ›๋Š”๋‹ค.
6. www.naver.com ํ˜ธ์ŠคํŠธ๋„ค์ž„์— ๋Œ€ํ•œ IP ์ฃผ์†Œ๋ฅผ ์งˆ์˜ ํ•œ๋‹ค.
7. IP ์ •๋ณด๋ฅผ ์ „๋‹ฌ๋ฐ›๋Š”๋‹ค.
8. Local DNS๋Š” www.nvaer.com์— ๋Œ€ํ•œ IP ์ฃผ์†Œ๋ฅผ ์บ์‹ฑ์„ ํ•˜๊ณ  IP ์ฃผ์†Œ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

โ€ป ROOT -> COM -> xxx.com ์„œ๋ฒ„๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์งˆ์˜ํ•ด์„œ ๋‹ต์„ ์ฐพ๋Š” ๊ณผ์ •์„ Recursive Query๋ผ๊ณ  ํ•œ๋‹ค.

 

 


DNS Round Robin

round robin์ด๋ž€ DNS ์„œ๋ฒ„ ๊ตฌ์„ฑ ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜๋‹ค.
Domain์— ๋Œ€ํ•œ IP์š”์ฒญ 

 

์›๋ฆฌ

  • ์›น ์„œ๋น„์Šค๋ฅผ ๋‹ด๋‹นํ•  ์—ฌ๋Ÿฌ ๋Œ€์˜ ์›น ์„œ๋ฒ„๋Š” ์ž์‹ ์˜ ๊ณต์ธ IP๋ฅผ ๊ฐ๊ฐ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ์‚ฌ์ดํŠธ ์ ‘์†์„ ์œ„ํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ๋„๋ฉ”์ธ ์ฃผ์†Œ๋ฅผ ๋ธŒ๋ผ์šฐ์ €์— ์ž…๋ ฅํ•˜๋ฉด DNS๋Š” ๋„๋ฉ”์ธ์˜ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋Š”๋ฐ ์ด๋–„ IP์ฃผ์†Œ๋ฅผ ์—ฌ๋Ÿฌ ๋Œ€์˜ ์„œ๋ฒ„ IP๋ฆฌ์ŠคํŠธ ์ค‘์—์„œ ๋ผ์šด๋“œ ๋กœ๋นˆ ํ˜•ํƒœ๋กœ ๋žœ๋คํ•˜๊ฒŒ ํ•˜๋‚˜ ํ˜น์€ ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ์„ ํƒํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ ค์ค€๋‹ค.
  • ๊ฒฐ๊ณผ์ ์œผ๋กœ ์›น ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•˜๋Š” ๋‹ค์ˆ˜์˜ ์‚ฌ์šฉ์ž๋Š” ์‹ค์ œ๋กœ๋Š” ๋ณต์ˆ˜์˜ ์›น ์„œ๋ฒ„์— ๋‚˜๋‰˜์–ด ์ ‘์†ํ•˜๋„ ๋˜๋ฉด์„œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๊ฐ€ ๋ถ„์‚ฐ๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
๋ผ์šด๋“œ ๋กœ๋นˆ DNS๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ IP์ฃผ์†Œ๋ฅผ ๊ฒฐ๊ณผ๋กœ ๋Œ๋ ค์ค€๋‹ค.

์‚ฌ์šฉ์ž์˜ OS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋”ฐ๋ผ ๋™์ž‘์ด ๋‹ค๋ฅด๋‹ค.
์—ฌ๋Ÿฌ๊ฐœ์˜ IP ์ค‘ ์ œ์ผ๋จผ์ € ์กฐํšŒ๋œ IP๋ฅผ ์„ ํƒ, ๋ฌด์ž‘์œ„๋กœ IP๋ฅผ ์„ ํƒํ•œ๋‹ค.
๋˜๋Š” ์„ ํƒ IP ์ ‘์†์ด ์•ˆ๋˜๋ฉด ๊ทธ๋‹ค์Œ ์กฐํšŒ๋œ IP์ ‘์†ํ•˜๋„๋ก ํ˜ธ์ง์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  •  

 

 

๋‹จ์ 

1. ์„œ๋ฒ„์˜ ์ˆ˜ ๋งŒํผ ๊ณต์ธ IP ์ฃผ์†Œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
๋ถ€ํ•˜ ๋ถ„์‚ฐ์„ ์œ„ํ•ด ์„œ๋ฒ„์˜ ๋Œ€์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ทธ ๋งŒํผ์˜ ๊ณต์ธ IP ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

2. ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„์‚ฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋ชจ๋ฐ”์ผ ์‚ฌ์ดํŠธ ๋“ฑ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์Šค๋งˆํŠธํฐ์˜ ์ ‘์†์€ ์บ๋ฆฌ์–ด ๊ฒŒ์ดํŠธ์›จ์ด ๋ผ๊ณ  ํ•˜๋Š” ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ๊ฒฝ์œ  ํ•ฉ๋‹ˆ๋‹ค.
ํ”„๋ก์‹œ ์„œ๋ฒ„์—์„œ๋Š” ์ด๋ฆ„๋ณ€ํ™˜ ๊ฒฐ๊ณผ๊ฐ€ ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ์บ์‹ฑ๋˜๋ฏ€๋กœ ๊ฐ™์€ ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ๊ฒฝ์œ  ํ•˜๋Š” ์ ‘์†์€ ํ•ญ์ƒ ๊ฐ™์€ ์„œ๋ฒ„๋กœ ์ ‘์†๋ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ PC ์šฉ ์›น ๋ธŒ๋ผ์šฐ์ €๋„ DNS ์งˆ์˜ ๊ฒฐ๊ณผ๋ฅผ ์บ์‹ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ€ํ•˜๋ถ„์‚ฐ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
DNS ๋ ˆ์ฝ”๋“œ์˜ TTL ๊ฐ’์„ ์งง๊ฒŒ ์„ค์ •ํ•จ์œผ๋กœ์จ ์–ด๋Š ์ •๋„ ํ•ด์†Œ๊ฐ€ ๋˜์ง€๋งŒ, TTL ์— ๋”ฐ๋ผ ์บ์‹œ๋ฅผ ํ•ด์ œํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

3. ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜๋„ ํ™•์ธ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
DNS ์„œ๋ฒ„๋Š” ์›น ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋‚˜ ์ ‘์† ์ˆ˜ ๋“ฑ์˜ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์งˆ์˜๊ฒฐ๊ณผ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์—†๋‹ค.
์›น ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๊ฐ€ ๋†’์•„์„œ ์‘๋‹ต์ด ๋Š๋ ค์ง€๊ฑฐ๋‚˜ ์ ‘์†์ˆ˜๊ฐ€ ๊ฝ‰ ์ฐจ์„œ ์ ‘์†์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์ธ ์ง€๋ฅผ ์ „ํ˜€ ๊ฐ์ง€ํ•  ์ˆ˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ์›์ธ์œผ๋กœ ๋‹ค์šด๋˜๋”๋ผ๋„ ์ด๋ฅผ ๊ฒ€์ถœํ•˜์ง€ ๋ชปํ•˜๊ณ  ์œ ์ €๋“ค์—๊ฒŒ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
์ด๋•Œ๋ฌธ์— ์œ ์ €๋“ค์€ ๊ฐ„ํ˜น ๋‹ค์šด๋œ ์„œ๋ฒ„๋กœ ์—ฐ๊ฒฐ์ด ๋˜๊ธฐ๋„ ํ•˜์ฃ .
DNS ๋ผ์šด๋“œ ๋กœ๋นˆ์€ ์–ด๋””๊นŒ์ง€๋‚˜ ๋ถ€ํ•˜๋ถ„์‚ฐ ์„ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด์ง€ ๋‹ค์ค‘ํ™” ๋ฐฉ๋ฒ•์€ ์•„๋‹ˆ๋ฏ€๋กœ ๋‹ค๋ฅธ S/W ์™€ ์กฐํ•ฉํ•ด์„œ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

 

 

ํ•ด๊ฒฐ๋ฒ•

๋‹ค์ค‘ํ™” ๊ตฌ์„ฑ ๋ฐฉ์‹ (Synchronous Time-Division Multiplexing)
AP ์„œ๋ฒ„์— VIP(Virtual IP)๋ฅผ ๋ถ€์—ฌํ•ด์„œ ๋‹ค์ค‘ํ™”๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค. ๊ฐ AP ์„œ๋ฒ„๋ฅผ Health Checkํ›„ ์ด์ƒ์ด ๊ฐ์ง€๋˜๋ฉด VIP๋ฅผ ์ •์ƒ AP ์„œ๋ฒ„๋กœ ์ธ๊ณ„ํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.
์ฆ‰ DNS Server Table ์— ์‹ค์‹œ๊ฐ„์œผ๋กœ AP ์„œ๋ฒ„์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์นผ๋Ÿผ ๋ฐ ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์š”์ฒญ๋  ๊ฒฝ์šฐ ์„œ๋ฒ„ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜์—ฌ ์šฐํšŒ๋ฃจํŠธ๋ฅผ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ ์—๋Ÿฌ๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์ค‘์น˜ ํŽธ์„ฑ ๋ฐฉ์‹ (Weighted round robin)
๊ฐ๊ฐ์˜ ์›น ์„œ๋ฒ„์— ๊ฐ€์ค‘์น˜๋ฅผ ๊ฐ€๋ฏธํ•ด์„œ ๋ถ„์‚ฐ ๋น„์œจ์„ ๋ณ€๊ฒฝํ•œ๋‹ค. ๋ฌผ๋ก  ๊ฐ€์ค‘์น˜๊ฐ€ ํฐ ์„œ๋ฒ„์ผ์ˆ˜๋ก ๋นˆ๋ฒˆํ•˜๊ฒŒ ์„ ํƒ๋˜๋ฏ€๋กœ ์ฒ˜๋ฆฌ๋Šฅ๋ ฅ์ด ๋†’์€ ์„œ๋ฒ„๋Š” ๊ฐ€์ค‘์น˜๋ฅผ ๋†’๊ฒŒ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.


๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์˜ ๋„์ž…์„ ํ†ตํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์„ฑ๋„ ๊ฐ€๋Šฅ

์ตœ์†Œ ์—ฐ๊ฒฐ ๋ฐฉ์‹ (Least connection)
์ ‘์† ํด๋ผ์ด์–ธํŠธ ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ ์€ ์„œ๋ฒ„๋ฅผ ์„ ํƒํ•œ๋‹ค. ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ connection ์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜ ๊ฐ ์„œ๋ฒ„์—์„œ ์ฃผ๊ธฐ์ ์œผ๋กœ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค.


Reference.

link1 link2

์ดˆ๋ณด ์›น ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์Šคํ”„๋ง 5 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ž…๋ฌธ
์ €์ž : ์ตœ๋ฒ”๊ท 

 

CH 3. ์Šคํ”„๋ง DI

1. ์˜์กด์ด๋ž€ ?

  • DI Dependency Injection ์˜์กด ์ฃผ์ž…
  • ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด
  • ์˜์กด์€ ๋ณ€๊ฒฝ์— ์˜ํ•ด ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๊ด€๊ณ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • ์˜์กดํ•˜๋Š” ๋Œ€์ƒ์ด ์žˆ์œผ๋ฉด ๊ทธ ๋Œ€์ƒ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•˜๋‹ค.
    • ์˜์กด ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑ ( ์ด ๋‚ด์šฉ์„ ๊ณต๋ถ€ํ•ด๋ณด์ž ) 
    • DI์™€ ์„œ๋น„์Šค ๋กœ์ผ€์ดํ„ฐ

 

 

 

2. DI๋ฅผ ํ†ตํ•œ ์˜์กด ์ฒ˜๋ฆฌ

  • ์˜์กดํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌ๋ฐ›๋Š” ๋ฐฉ์‹์„ ์ด์šฉํ•˜๋Š” DI
public class MemberRegisterService {
	
    // ์ง์ ‘ ์˜์กด ๊ฐ์ฒด ์ƒ์„ฑ 
    private MemberDao memberDao = new MemberDao();
    
    //์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด์„œ ์˜์กด ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌ ๋ฐ›๋Š” ํ˜•์‹
    private MemberDao memberDao;
    public MemberRegisterService(MemberDao memberDao){
    	this.memberDao = memberDao;
    }
    
    ...
}

 

  • ๋งŒ์•ฝ MemberRegisterService ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ƒ์„ฑ์ž์— MemberDao ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค.
MemberDao dao = new MemberDao();
// ์˜์กด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์ฃผ์ž…ํ•œ๋‹ค.
MemberRegisterService svc = new MemberRegisterService(dao);
๋ณต์žกํ•ด ๋ณด์ด๋Š”๋ฐ ์™œ ์ƒ์„ฑ์ž ํ†ตํ•ด์„œ ์˜์กดํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ• ๊นŒ?
 -> ๋ณ€๊ฒฝ์˜ ์œ ์—ฐํ•จ์„ ์œ„ํ•ด์„œ!!

 

 

3. DI์™€ ์˜์กด ๊ฐ์ฒด ๋ณ€๊ฒฝ์˜ ์œ ์—ฐํ•จ

  • ์˜์กด ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹ = ํ•„๋“œ๋‚˜ ์ƒ์„ฑ์ž์—์„œ new ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•ด ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด ๊ฐ์ฒด ์ƒ์„ฑ
public class MemeberRegisterService {
	private MemberDao memberDao = new MemberDao();
    ...
}

์ด๊ฒƒ๊ณผ

public class ChangePasswordService {
	private MemberDao memberDao = new MemberDao();
    ...
}

์ด๋ ‡๊ฒŒ ๋‘๊ฐœ์˜ ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ์ƒํ™ฉ.

์บ์‹œ๋ฅผ ์ด์šฉํ•ด ์กฐํšŒ์†๋„๋ฅผ ํ–ฅ์ƒ ์‹œํ‚ค๊ณ ์ž ํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒ...!!

memberDao -> cachedMemberDao ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•จ~!~!

public class CachedMemberDao extends MemberDao {
	...
}

๊ทธ๋ ‡๋‹ค๋ฉด MemberRegisterService์™€ ChangePasswordService ๋ชจ๋‘ MemberDao์—์„œ CachedMemberDao๋กœ ๋ฐ”๊ฟ”์ค˜์•ผํ•จ... ( ๊ฐ์ฒด ์ƒ์„ฑ์‹œ๋งˆ๋‹ค ํ•˜๋‚˜ํ•˜๋‚˜ ๋ณ€๊ฒฝ ํ•ด์ฃผ์–ด์•ผ ํ•จ... )

 

 

๋™์ผ ์ƒํ™ฉ์—์„œ DI๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ˆ˜์ • ์ฝ”๋“œ๊ฐ€ ์ค„์–ด๋“ ๋‹ค...!!!  ( ํด๋ž˜์Šค๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์—ฌ๋„ ์˜์กด ์ฃผ์ž… ๋˜์ƒ์ด ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ํ•œ๊ณณ์ด๋ผ, ๊ฐ์ฒด ์ƒ์„ฑ ์ฝ”๋“œ์—์„œ๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค,) 

public class MemberRegisterService{
	private MemberDao memberDao;
    public MemberRegisterService(MemberDao memberDao){
    	this.memberDao = memberDao;
    }
    ...
}


public class ChangePasswordService{
	private MemberDao memberDao;
    public ChangePasswordService(MemberDao memberDao){
    	this.memberDao = memberDao;
    }
    ...
}


// --------------------------
// ์œ„ ๋’ค ํด๋ž˜์Šค์˜ ๊ฐ์ฒด ์ƒ์„ฑ์‹œ
// MemberDao memberDao = new MemberDao;
// ๋งŒ ๋ฐ”๊พธ๋ฉด ๋œ๋‹ค~!~!
MemberDao memberDao = new CachedMemberDao;

MemberRegisterService regSvc = new MemberRegisterService(memberDao);
ChangePasswordService pwdSvc = new ChangePasswordService(memberDao);

 

 

4. ์˜ˆ์ œ ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ

|---ํšŒ์› ๋ฐ์ดํ„ฐ ๊ด€๋ จ ํด๋ž˜์Šค
|  |---Member
|  |---WrongPasswordException
|  |---MemberDao
|
|---ํšŒ์› ๊ฐ€์ž… ์ฒ˜๋ฆฌ ๊ด€๋ จ ํด๋ž˜์Šค
|  |---DuplicateMemberException
|  |---RegisterRequest
|  |---MemberRegisterService
|
|---์•”ํ˜ธ ๋ณ€๊ฒฝ ๊ด€๋ จ ํด๋ž˜์Šค
|  |---MemberNotFoundException
|  |---ChangePasswordService

 

 

5. ๊ฐ์ฒด ์กฐ๋ฆฝ๊ธฐ

  • assembler
  • ์•ž์„œ DI ์„ค๋ช… ์‹œ ์ƒ์„ฑ์— ์‚ฌ์šฉํ•  ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„ , ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ์ฝ”๋“œ ํ•œ ๊ณณ๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋œ๋‹ค๊ณ  ํ–ˆ๋‹ค.
    • ์‹ค์ œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋Š” ์–ด๋””์— ์žˆ์„๊นŒ???
      • main ๋ฉ”์†Œ๋“œ์— ์˜์กด ๋Œ€์ƒ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‚˜์˜์ง„ ์•Š๋‹ค. 
      • ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์˜์กด ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•ด์ฃผ๋Š” ํด๋ž˜์Šค๋ฅผ ๋”ฐ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค. (์กฐ๋ฆฝ)
public class Assembler {

	private MemberDao memberDao;
    private MemberRegisterService memberRegisterService;
    private ChangePasswordService changePasswordService;
    
    // MemberRegisterService์™€ ChangePasswordService ๊ฐ์ฒด์— ๋Œ€ํ•œ ์˜์กด์„ ์ฃผ์ž…ํ•œ๋‹ค.
    // MemberRegisterService์€ memberDao ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…๋ฐ›๊ณ ,
    // ChangePasswordService๋Š” setter๋ฅผ ํ†ตํ•ด ์ฃผ์ž…๋ฐ›๋Š”๋‹ค.
    public Assembler(){
    	memberDao = new MemberDao();
        // memberDao = new CachedMemberDao();
        regSvc = new MemberRegisterService(memberDao);
        pwdSvc = new ChangePasswordService();
        pwdSvc.setMemberDao(memberDao);
    }
    ...
}

 

์œ„์™€ ๊ฐ™์ด ์ƒ์„ฑํ•œ Assembler๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๋Š”...??

-> Assembler ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ - get ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ๊ตฌํ•จ - ๊ทธ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉ

Assembler assembler = new Assembler();
ChangePasswordService changePwdSvc = assembler.getChangePasswordService();
changePwdSvc.changePassword("์ด๋ฉ”์ผ","๋น„๋ฒˆ","newpwd");

 

  • Assembler ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž์—์„œ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์˜์กด์„ ์ฃผ์ž…ํ•œ๋‹ค.
  • ๋”ฐ๋ผ์„œ Assembler ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์‹œ์ ์— ์‚ฌ์šฉํ•  ๊ฐ์ฒด๊ฐ€ ๋ชจ๋‘ ์ƒ์„ฑ๋œ๋‹ค.
  • ๊ทธ ํ›„ Assembler๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ๊ตฌํ•˜๊ณ , ๊ทธ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ „ํ˜•์  ํŒจํ„ด์ด๋‹ค!

 

 

6. ์Šคํ”„๋ง์˜ DI ์„ค์ •

  • ์Šคํ”„๋ง์€ MemberRegisterService์™€ MemberDao์™€ ๊ฐ™์€ ํŠน์ • ํƒ€์ž…์˜ ํด๋ž˜์Šค๋งŒ ์ƒ์„ฑํ•œ Assembler์™€ ๋‹ฌ๋ฆฌ ๋ฒ”์šฉ ์กฐ๋ฆฝ๊ธฐ ์—ญํ• ์„ ํ•œ๋‹ค....!!!
  • ์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์šฐ์„  ์Šคํ”„๋ง์ด ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์˜์กด์„ ์–ด๋–ป๊ฒŒ ์ฃผ์ž…ํ• ์ง€ ์ •์˜ํ•œ ์„ค์ • ์ •๋ณด ์ž‘์„ฑ ํ•„์ˆ˜
  • ์„ค์ •์ฝ”๋“œ๋Š” ์ฃผ๋กœ config ํŒจํ‚ค์ง€~
// ์Šคํ”„๋ง ์„ค์ • ํด๋ž˜์Šค๋ฅผ ์˜๋ฏธํ•˜๋Š” ์—๋…ธํ…Œ์ด์…˜
@Configuration
public Class AppCtx{
	
    // ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ง ๋นˆ์ด๋ผ๊ณ  ์„ค์ •ํ•˜๋Š” ์—๋…ธํ…Œ์ด์…˜
    // memberDao ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์ƒ์„ฑํ•œ ๋นˆ ๊ฐ์ฒด๋Š” "memberDao"๋ž€ ์ด๋ฆ„์œผ๋กœ ์Šคํ”„๋ง์— ๋“ฑ๋ก
    @Bean
    public MemberDao memberDao(){
    	return new MemberDao();
    }
    
    @Bean
    // MemberRegisterService ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ
    // memberDao()๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฏ€๋กœ memberDao()๊ฐ€ ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋ฅผ
    // MemberRegisterService ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์ฃผ์ž…
    public MemberRegisterService memberRegSvc(){
    	return new MemberRegisterService(memberDao);
    }
    
    @Bean
    public ChangePasswordService changePwdSvc(){
    	ChangePasswordService pwdSvc = new ChangePasswordService();
        // setMemberDao() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด ์˜์กด๊ด€๊ณ„๋ฅผ ์ฃผ์ž…ํ•œ๋‹ค
        pwdSvc.setMemberDao(memberDao());
    	return pwdSvc;
    }

 

 

  • ์„ค์ • ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๊ณ  ๋์ด ์•„๋‹ˆ๋‹ค!!!!!!!
    • ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•œ๋‹ค. ( ์ปจํ…Œ์ด๋„ˆ : ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์˜์กด ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ์—ญํ•  )
    • // ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ
      ApplicationContext ctx = new AnnotationConfigApplicationContext(AppCtx.class);
      
      
      // ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ ํ›„ getBean() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด ์‚ฌ์šฉํ•  ๊ฐ์ฒด๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.
      // ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ด๋ฆ„์ด memberRegSvc์ธ ๋นˆ ๊ฐ์ฒด๋ฅผ ๊ตฌํ•œ๋‹ค.
      MemberRegisterService regSvc = ctx.getBean("memberRegSvc", MemberRegisterService.class);

 

 

DI ๋ฐฉ์‹ 1 : ์ƒ์„ฑ์ž ๋ฐฉ์‹

  • ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์˜์กด ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…๋ฐ›์•„ ํ•„๋“œ(this.memberDao)์— ํ• ๋‹นํ•œ๋‹ค
private MemberDao memberDao;

// ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์˜์กด ๊ฐ์ฒด๋ฅผ ์ฃผ์ž… ๋ฐ›์Œ
public MemberRegisterService(MemberDao memberDao){
	// ์ฃผ์ž… ๋ฐ›์€ ๊ฐ์ฒด๋ฅผ ํ•„๋“œ์— ํ• ๋‹น
    this.memberDao = memberDao;
}

public Long regist(RegisterRequest req){
	// ์ฃผ์ž… ๋ฐ›์€ ์˜์กด ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ
    Member member = memberDao.selectByEmail(req.getEmail());
    ...
    memberDao.insert(newMember);
    ...
}

 

 

  • ์ƒ์„ฑ์ž์— ์˜ํ•ด ์ „๋‹ฌํ•  ์˜์กด ๊ฐ์ฒด๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ์ด์–ด๋„ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ฃผ์ž…ํ•˜๋ฉด ๋œ๋‹ค. 
// ์ƒ์„ฑ์ž ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋‘๊ฐœ์ธ ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด์ž~!

public class MemberDao{
	...
    public Collection<Member> selectAll(){
    	return map.values();
    }
}


// =====================================================================
// ์ƒ์„ฑ์ž๋กœ ๋‘ ๊ฐœ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ „๋‹ฌ๋ฐ›๋Š” ํด๋ž˜์Šค ์ž‘์„ฑ
// MemberDao, MemberPrinter ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌ ๋ฐ›๋Š”๋‹ค.
public MemberListPrinter(MemberDao memberDao, MemberPrinter printer){
	this.memberDao = memberDao;
   	this.printer = printer;
}


// ======================================================================

7. @Configuration ์„ค์ • ํด๋ž˜์Šค์˜ @Bean ์„ค์ •๊ณผ ์‹ฑ๊ธ€ํ†ค

8. ๋‘ ๊ฐœ ์ด์ƒ์˜ ์„ค์ • ํŒŒ์ผ ์‚ฌ์šฉํ•˜๊ธฐ

9. getBean( ) ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ

10. ์ฃผ์ž… ๋Œ€์ƒ ๊ฐ์ฒด๋ฅผ ๋ชจ๋‘ ๋นˆ ๊ฐ์ฒด๋กœ ์„ค์ •ํ•ด์•ผ ํ•˜๋‚˜?

Field Injection(ํ•„๋“œ ์ฃผ์ž…)

๋ณ€์ˆ˜ ์„ ์–ธ๋ถ€์— @Autowired Annotation์„ ๋ถ™์ธ๋‹ค.

@Component
public class SampleController {
    @Autowired
    private SampleService sampleService;
}

 

ํ•„๋“œ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋˜๋Š” ์ด์œ 

1. ๋‹จ์ผ ์ฑ…์ž„(SRP)์˜ ์›์น™ ์œ„๋ฐ˜ 

์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๊ธฐ๊ฐ€ ์‰ฝ๋‹ค.
@Autowired ์„ ์–ธ ์•„๋ž˜ ๊ฐœ์ˆ˜ ์ œํ•œ ์—†์ด ๋ฌดํ•œ์ • ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. Constructor์˜ parameter๊ฐ€ ๋งŽ์•„์ง๊ณผ ๋™์‹œ์— ํ•˜๋‚˜์˜ Class๊ฐ€ ๋งŽ์€ ์ฑ…์ž„์„ ๋– ์•ˆ๋Š”๋‹ค๋Š” ๊ฑธ ์•Œ๊ฒŒ๋œ๋‹ค.

 

2. ์˜์กด์„ฑ์ด ์ˆจ๋Š”๋‹ค. 

DI Container๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์€ Class๊ฐ€ ์ž์‹ ์˜ ์˜์กด์„ฑ๋งŒ ์ฑ…์ž„์ง„๋‹ค๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์ œ๊ณต๋œ ์˜์กด์„ฑ ๋˜ํ•œ ์ฑ…์ž„์ง„๋‹ค. ๊ทธ๋ž˜์„œ Class๊ฐ€ ์–ด๋–ค ์˜์กด์„ฑ์„ ์ฑ…์ž„์ง€์ง€ ์•Š์„ ๋•Œ, ๋ฉ”์„œ๋“œ๋‚˜ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด(Setter๋‚˜ Constructor) ํ™•์‹คํžˆ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ด ๋˜์–ด์•ผํ•œ๋‹ค.

ํ•˜์ง€๋งŒ Field Injection์€ ์ˆจ์€ ์˜์กด์„ฑ๋งŒ ์ œ๊ณตํ•ด์ค€๋‹ค.

 

3. DI container์˜ ๊ฒฐํ•ฉ์„ฑ๊ณผ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ

DI Framework์˜ ํ•ต์‹ฌ ์•„์ด๋””์–ด๋Š” ๊ด€๋ฆฌ๋˜๋Š” Class๊ฐ€ DI Container์— ์˜์กด์„ฑ์ด ์—†์–ด์•ผ ํ•œ๋‹ค.

DI Container ์—†์ด๋„ Unit Test์—์„œ Instanceํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ณ , ๊ฐ๊ฐ ๋‚˜๋ˆ„์–ด์„œ ํ…Œ์ŠคํŠธ๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค. Container์˜ ๊ฒฐํ•ฉ์„ฑ์ด ์—†๋‹ค๋ฉด ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š” Class๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ์‹ฌ์ง€์–ด ๋‹ค๋ฅธ DI Container๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ, Field Injection์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ๊ฐ€์ง„ Class๋ฅผ ๊ณง๋ฐ”๋กœ Instanceํ™” ์‹œํ‚ฌ ์ˆ˜ ์—†๋‹ค.

 

4. ๋ถˆ๋ณ€์„ฑ

Constructor Injection๊ณผ ๋‹ค๋ฅด๊ฒŒ Field Injection์€ final์„ ์„ ์–ธํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ์ฒด๊ฐ€ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

5. ์ˆœํ™˜ ์˜์กด์„ฑ

Constructor Injection์—์„œ ์ˆœํ™˜ ์˜์กด์„ฑ์„ ๊ฐ€์งˆ ๊ฒฝ์šฐ BeanCurrentlyCreationExeption์„ ๋ฐœ์ƒ์‹œํ‚ด์œผ๋กœ์จ ์ˆœํ™˜ ์˜์กด์„ฑ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. 

๊ทธ๋Ÿฌ๋‚˜ Field Injection์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ๋ง๊ณ ๋Š” ์™ธ๋ถ€์—์„œ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†๋‹ค.

์ˆœํ™˜ ์˜์กด์„ฑ?
A Class๊ฐ€ B Class๋ฅผ ์ฐธ์กฐํ•˜๋Š”๋ฐ B Class๊ฐ€ ๋‹ค์‹œ A Class๋ฅผ ์ฐธ์กฐํ•  ๊ฒฝ์šฐ,A Class๊ฐ€ B Class๋ฅผ ์ฐธ์กฐํ•˜๊ณ , B Class๊ฐ€ C Class๋ฅผ ์ฐธ์กฐํ•˜๊ณ  C Class๊ฐ€ A Class๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ์ˆœํ™˜ ์˜์กด์„ฑ(Circular Dependency)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

์ฝ๊ธฐ ์‰ฝ๊ณ  ์‚ฌ์šฉ์ด ํŽธํ•˜๋‹จ๊ฒƒ ์ด์™ธ์—” ์žฅ์ ์ด...

 

 

 

Setter Injection(์ˆ˜์ •์ž ์ฃผ์ž…)

Setter Injection์€ ์„ ํƒ์ ์ธ ์˜์กด์„ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค. ์ƒํ™ฉ์— ๋”ฐ๋ผ ์˜์กด์„ฑ ์ฃผ์ž…์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

//Setter Injection์€ set Method๋ฅผ ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.
@Component
public class SampleController {
    private SampleService sampleService;
 
    @Autowired
    public void setSampleService(SampleService sampleService) {
        this.sampleService = sampleService;
    }
}

Setter Injection์œผ๋กœ ์˜์กด๊ด€๊ณ„ ์ฃผ์ž…์€ ๋Ÿฐํƒ€์ž„์‹œ์— ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๊ตฌํ˜„๋˜์—ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ Setter Injection์„ ํ†ตํ•ด์„œ Service์˜ ๊ตฌํ˜„์ฒด๋ฅผ ์ฃผ์ž…ํ•ด์ฃผ์ง€ ์•Š์•„๋„ Controller ๊ฐ์ฒด๋Š” ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

Controller ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์€ ๋‚ด๋ถ€์— ์žˆ๋Š” Service์˜ method ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ธ๋ฐ, set์„ ํ†ตํ•ด Service์˜ ๊ตฌํ˜„์ฒด๋ฅผ ์ฃผ์ž…ํ•ด์ฃผ์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ, NullPointerException ์ด ๋ฐœ์ƒํ•œ๋‹ค.

 

์ฃผ์ž…์ด ํ•„์š”ํ•œ ๊ฐ์ฒด๊ฐ€ ์ฃผ์ž…์ด ๋˜์ง€ ์•Š์•„๋„ ์–ผ๋งˆ๋“ ์ง€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ๋ฌธ์ œ๋‹ค.

 

์ด๋ฅผ ํ•ด๊ฒฐํ•  ์•„์ด๊ฐ€ Constructor Injection์ด๋‹ค

 

 

 

 

Constructor Injection(์ƒ์„ฑ์ž ์ฃผ์ž…)

//Constructor์— @Autowired Annotation์„ ๋ถ™์—ฌ ์˜์กด์„ฑ์„ ์ฃผ์ž…๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
@Component
public class SampleService {
    private SampleDAO sampleDAO;
 
    @Autowired
    public SampleService(SampleDAO sampleDAO) {
        this.sampleDAO = sampleDAO;
    }
}

@Component
public class SampleController {

	private final SampleService sampleService = new SampleService(new SampleDAO());
    
	...
}

 

์ƒ์„ฑ์ž ์ฃผ์ž…์„ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ์ด์œ !!!

(Spring Framework Reference์—์„œ ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•œ ์ฃผ์ž…~!)

์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์ข‹์€ ์ด์œ ๋Š” ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ์˜์กด์„ฑ ์—†์ด๋Š” Instance๋ฅผ ๋งŒ๋“ค์ง€ ๋ชปํ•˜๋„๋ก ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

Spring 4.3๋ฒ„์ „๋ถ€ํ„ฐ๋Š” Class๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ DI Framework๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‹จ์ผ ์ƒ์„ฑ์ž์— ํ•œํ•ด @Autowired๋ฅผ ๋ถ™์ด์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

๋˜ํ•œ ์•ž์„œ ์‚ดํŽด๋ณธ Field Injection์˜ ๋‹จ์ ๋“ค์„ ์žฅ์ ์œผ๋กœ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

  • null์„ ์ฃผ์ž…ํ•˜์ง€ ์•Š๋Š” ํ•œ NullPointerException ์€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • final ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ˆœํ™˜ ์˜์กด์„ฑ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๊ธฐ๊ฐ€ ๋ฒˆ๊ฑฐ๋กœ์›Œ ์œ„๊ธฐ๊ฐ์„ ๋Š๋‚„ ์ˆ˜ ์žˆ๋‹ค. (์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ SRP์›์น™์„ ์ƒ๊ฐํ•˜๊ฒŒ ๋˜๊ณ  ๋ฆฌํŒฉํ† ๋งํ•˜๊ฒŒ๋œ๋‹ค.)

Reference.

link1

์ถœ์ฒ˜ : https://sehun-kim.github.io/sehun/springbean-lifecycle/#2

 

์Šคํ”„๋ง์˜ ์‚ผ๊ฐํ˜•
DI IoC AOP

์Šคํ”„๋ง์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ์„ค๊ณ„ ๊ฐœ๋…์ธ ์Šคํ”„๋ง์˜ ์‚ผ๊ฐํ˜•

 

 

์˜์กด์„ฑ ์ฃผ์ž… DI ( Dependency Injection )

Inversion of Control ์ด๋ผ๊ณ ๋„ ํ•˜๋Š” ์˜์กด ๊ด€๊ณ„ ์ฃผ์ž…(Dependency Injection)์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ์–ด๋–ค ๊ฐ์ฒด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์˜์กด ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, ์ฃผ์ž… ๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. (new ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค) ์Šคํ”„๋ง์ด ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ์ฐจ๋ณ„ํ™”๋˜์–ด ์ œ๊ณตํ•˜๋Š” ์˜์กด ๊ด€๊ณ„ ์ฃผ์ž… ๊ธฐ๋Šฅ์œผ๋กœ, DI(์˜์กด์„ฑ ์ฃผ์ž…)๋ฅผ ํ†ตํ•ด์„œ ๋ชจ๋“ˆ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์•„์ง€๊ณ  ์œ ์—ฐ์„ฑ์ด ๋†’์•„์ง„๋‹ค.

์ถœ์ฒ˜ :https://velog.io/@gillog/Spring-DIDependency-Injection

A ๊ฐ์ฒด์—์„œ B, C๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉ(์˜์กด)ํ•  ๋•Œ, A ๊ฐ์ฒด์—์„œ ์ง์ ‘ ์ƒ์„ฑ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์™ธ๋ถ€(IOC์ปจํ…Œ์ด๋„ˆ)์—์„œ ์ƒ์„ฑ๋œ B, C๊ฐ์ฒด๋ฅผ ์กฐ๋ฆฝ(์ฃผ์ž…)์‹œ์ผœ setter ํ˜น์€ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹ 

 

์˜ˆ์‹œ๋กœ ์žฅ๋‚œ๊ฐ๊ณผ ๋ฐฐํ„ฐ๋ฆฌ๋ฅผ ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์žฅ๋‚œ๊ฐ๋“ค์€ ๋ฒ ํ„ฐ๋ฆฌ๊ฐ€ ์žˆ์–ด์•ผ ์›€์ง์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ฆ‰ ๋ฒ ํ„ฐ๋ฆฌ์— ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค. ์žฅ๋‚œ๊ฐ๋“ค์—๊ฒŒ ๋ฒ ํ„ฐ๋ฆฌ๋ฅผ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ์„ ์˜์กด์„ฑ ์ฃผ์ž…์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์ข‹๋‹ค.

๋ฒ ํ„ฐ๋ฆฌ์˜ ์ผ์ฒดํ˜•์ธ ๊ฒฝ์šฐ์—๋Š” ์ƒ์„ฑ์ž์—์„œ๋งŒ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•ด์ฃผ๋Š” ์ƒํ™ฉ์ด๋ผ ๋ฒ ํ„ฐ๋ฆฌ๊ฐ€ ๋–จ์–ด์ง€๊ฒŒ ๋œ๋‹ค๋ฉด ๋‹ค๋ฅธ ๋ฒ ํ„ฐ๋ฆฌ๋กœ ๊ต์ฒดํ•˜์ง€ ๋ชปํ•˜๊ณ  ์ƒˆ๋กœ์šด ๊ฒƒ์œผ๋กœ ๋ฐ”๊ฟ”์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์—ฐํ•˜์ง€ ๋ชปํ•œ ๋ฐฉ์‹์ด๋‹ค. 

์ž๋ฐ”์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์—” setter, ์ƒ์„ฑ์ž๋ฅผ ์ด์šฉํ•ด์„œ ์™ธ๋ถ€์—์„œ ์ฃผ์ž…ํ•ด์ฃผ๋Š” ์ƒํ™ฉ์€ ์™ธ๋ถ€์—์„œ ๋ฒ ํ„ฐ๋ฆฌ๋ฅผ ๊ต์ฒดํ•ด์ค„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ผ์ฒดํ˜•๋ณด๋‹ค ์œ ์—ฐํ•œ ์ƒํ™ฉ์ด๋‹ค. 

 

 

์ถœ์ฒ˜ : https://velog.io/@gillog/Spring-DIDependency-Injection

์Šคํ”„๋ง์—์„œ๋Š” ๊ฐ์ฒด๋ฅผ Bean์ด๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ, ํ”„๋กœ์ ํŠธ๊ฐ€ ์‹คํ–‰๋ ๋•Œ ์‚ฌ์šฉ์ž๊ฐ€ Bean์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด๋“ค์˜ ์ƒ์„ฑ๊ณผ ์†Œ๋ฉธ์— ๊ด€๋ จ๋œ ์ž‘์—…์„ ์ž๋™์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ด์ฃผ๋Š”๋ฐ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋Š” ๊ณณ์„ ์Šคํ”„๋ง์—์„œ๋Š” Bean ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

 

 

์˜์กด์„ฑ ์ฃผ์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

1. ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์—ฌ์ค€๋‹ค.

2. ํ…Œ์ŠคํŠธ์— ์šฉ์ดํ•˜๋‹ค.

3. ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํ™” ์‹œ์ผœ์ค€๋‹ค.

4. ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์ˆ˜์›”ํ•˜๊ณ  ์ฝ”๋“œ๊ฐ€ ์ฝ๊ธฐ ์‰ฌ์›Œ์ง€๋Š” ์ ์ด ์žˆ๋‹ค.

5. ์ข…์†์„ฑ์ด ๊ฐ์†Œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ์— ๋ฏผ๊ฐํ•˜์ง€ ์•Š๋‹ค.

6. ๊ฒฐํ•ฉ๋„(coupling)๋Š” ๋‚ฎ์ถ”๋ฉด์„œ ์œ ์—ฐ์„ฑ๊ณผ ํ™•์žฅ์„ฑ์€ ํ–ฅ์ƒ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

7. ๊ฐ์ฒด๊ฐ„์˜ ์˜์กด๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 


Reference.

link1 link2

+ Recent posts