ํ‚ค์›Œ๋“œ ๊ด€๋ จ ์ž‘์„ฑ - ์œ ๋„์ง„

  • Entity / Value Object (+ DTO, DAO ๋“ฑ๋“ฑ์˜ ์šฉ์–ด?)
    • Entity : ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ์ฒด, ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•œ๋‹ค.
    • Value Object : ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š” ๊ฐ์ฒด, ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค.
    • Data Transfer Object : ๊ณ„์ธต๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด
    • Data Access Object : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด Database๋ฅผ ์œ„ํ•œ ๋กœ์ง๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด์„œ
  • Dependency (+ Injection)
    • ์˜์กด์ด๋ž€? ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์œ„ํ•œ ๋‹ค๋ฅธ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ
      • ์ด๋•Œ ์‚ฌ์šฉ์ด๋ž€ ๊ฐ์ฒด ์ƒ์„ฑ, ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ, ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ ๋“ฑ
    • ์˜์กด์€ ํ•˜๋ฉด ๋ณ€๊ฒฝ์ด ์ „ํŒŒ๋  ๊ฐ€๋Šฅ์„ฑ์„ ์˜๋ฏธ!
      • ex) ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์†Œ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ, ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธํƒ€์ž… ๋ณ€๊ฒฝ
    • ๋‹จ๋‹จํ•œ ๊ฒฐํ•ฉ๋„์™€ ๋А์Šจํ•œ ๊ฒฐํ•ฉ๋„
      • ๋‹จ๋‹จํ•œ ๊ฒฐํ•ฉ๋„ : Compile ์‹œ์ ์— ์˜์กด์„ฑ ์ƒ์„ฑ
      • ๋А์Šจํ•œ ๊ฒฐํ•ฉ๋„ : Runtile ์‹œ์ ์— ์˜์กด์„ฑ ์ƒ์„ฑ
    • ์‘์ง‘๋„์™€ ๊ฒฐํ•ฉ๋„
      • ์‘์ง‘๋„(Cohesion)
        • ๋ชจ๋“ˆ์— ํฌํ•จ๋œ ๋‚ด๋ถ€ ์š”์†Œ๋“ค์ด ์—ฐ๊ฐ„๋ผ ์žˆ๋Š” ์ •๋„
        • ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•  ๋•Œ ๋ชจ๋“ˆ ๋‚ด๋ถ€์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ณ€๊ฒฝ์˜ ์ •๋„
        • ๋ณ€๊ฒฝ์˜ ๋งŽ๋‹ค๋ฉด ์‘์ง‘๋„๊ฐ€ ๋†’์€ ๊ฒƒ!
      • ๊ฒฐํ•ฉ๋„(Coupling)
        • ๋‹ค๋ฅธ ๋ชจ๋“ˆ์— ๋Œ€ํ•ด์„œ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ง€์‹์„ ๊ฐ–๊ณ  ์žˆ๋Š” ์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ„
        • ํ•œ ๋ชจ๋“ˆ์ด ๋ณ€๊ฒฝ๋˜๊ธฐ ์œ„ํ•ด์„œ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์˜ ๋ณ€๊ฒฝ์„ ์š”๊ตฌํ•˜๋Š” ์ •๋„
        • ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’์„์ˆ˜๋ก ๋ณ€๊ฒฝํ•ด์•ผํ•˜๋Š” ๋ชจ๋“ˆ์˜ ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜ ๋ณ€๊ฒฝ์ด ์–ด๋ ค์›Œ ์ง„๋‹ค.
      • ์ข‹์€ ์„ค๊ณ„๋Š” ๋†’์€ ์‘์ง‘๋„์™€ ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„๋ฅผ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.
    • ์˜์กด์„ฑ ์ฃผ์ž…(DI)
      • IoC๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜
      • ๊ตฌํ˜„ ๋ฐฉ๋ฒ•
          1. ์ƒ์„ฑ์ž
          1. setter
          1. field
      • ์ƒ์„ฑ์ž๋ฅผ ๊ถŒ์žฅํ•จ.
        • null์„ ์ฃผ์ž…ํ•˜์ง€ ์•Š๋Š” ํ•œ NPE๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.
        • final์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ƒ์„ฑ ์ดํ›„ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค.
        • ์ƒ์„ฑ์ž์— ์˜์กด ๊ฐ์ฒด๋ฅผ ๋„ฃ์ง€ ์•Š์œผ๋ฉด ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š๋Š”๋‹ค.
        • ์ˆœํ™˜ ์˜์กด์„ฑ์„ ์ปดํŒŒ์ผ ๋‹จ๊ณ„์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
      • ํ˜น์‹œ๋‚˜ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด Setter๋ฅผ ๊ณ ๋ คํ•ด๋ณผ ์ˆ˜๋„ ์žˆ๋‹ค?
      • Autowired Annotation์ด Spring 4.3 ์ดํ›„๋กœ Default
      • ์—ฌ๋Ÿฌ ๊ฐœ ๊ตฌํ˜„์ฒด๊ฐ€ ์žˆ๋‹ค๋ฉด primary๋ฅผ ์ด์šฉํ•œ ์šฐ์„ ์ˆœ์œ„๋‚˜ Qualifer๋ฅผ ํ†ตํ•œ ๋„ค์ด๋ฐ ์ถ”๊ฐ€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ์ˆœํ™˜ ์˜์กด
      • ์˜์กด ๊ฐ์ฒด๋“ค์˜ ์˜์กด ๊ด€๊ณ„๊ฐ€ ์ˆœํ™˜๋˜๋Š” ๊ฒฝ์šฐ
      • ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ๋ญ์ง€?
  • IoC(Inversion Of Control)
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๊ฐ€ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์งœ๋†“์€ ํ‹€์—์„œ ์ˆ˜๋™์ ์œผ๋กœ ๋™์ž‘
      • The Hollywoord Principle
    • Context๋Š” ๊ฐ์ฒด์˜ ์ƒ์„ฑ, ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๋‹ด๋‹น
      • Context๋Š” IoC๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๊ณต๊ฐ„์œผ๋กœ IoC Container๋ผ๊ณ  ํ•œ๋‹ค.
      • Spring์—์„œ๋Š” Application Context๋ฅผ ์ด์šฉํ•œ๋‹ค.
    • IoC๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•
      • ์ „๋žตํŒจํ„ด / ์„œ๋น„์Šค ๋กœ์ผ€์ดํ„ฐ ํŒจํ„ด/ ํŒฉํ† ๋ฆฌ ํŒจํ„ด/ ์˜์กด์„ฑ ์ฃผ์ž… ๋“ฑ
  • ApplicationContext
    • Bean๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ์ฒด!
    • Bean ๊ฐ์ฒด: Application Context์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ์ฒด
      • JVM์— ๋งŽ์€ ๊ฐ์ฒด๊ฐ€ ๋“ฑ๋ก๋˜๊ณ  ์ด๋“ค ์ค‘ ApplicationContext์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด์„œ Bean์ด๋ผ๋Š” ์šฉ์–ด๊ฐ€ ๋งŒ๋“ค์–ด์ง.
      • Bean anontation์„ ์ด์šฉํ•ด์„œ ์„ ์–ธ
    • Configuration Meta
      • ์‹ค์ œ๋กœ ApplicationContext๋Š” ๋งŒ๋“ค์–ด์•ผ ํ•  ๋นˆ ๊ฐ์ฒด ์ •๋ณด๋ฅผ config๋ฅผ ํ†ตํ•ด์„œ ๋ฐ›์Œ.
      • ์ด๋•Œ config metadata๋ฅผ xml๊ณผ java๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค
        • xml ์ž‘์„ฑ โ‡’ GenericXmlApplicationContext ๊ตฌํ˜„์ฒด ์‚ฌ์šฉ
        • java์ž‘์„ฑ โ‡’ AnnotationConfigApplicationContext ๊ตฌํ˜„์ฒด ์‚ฌ์šฉ
        • java๋กœ ์ž‘์„ฑ๋˜๋Š” ๊ฒŒ ์ฃผ๋ฅ˜๋ฅผ ์ด๋ฃฌ๋‹ค.
  • Components Scan
    • ์œ„์—์„œ ๋งํ–ˆ๋˜ ๋นˆ ๊ฐ์ฒด๋“ค์— ๋Œ€ํ•ด์„œ ์„ค์ • ํด๋ž˜์Šค์— ๋”ฐ๋กœ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ์•Œ์•„์„œ ์ฐพ์•„์„œ ๋“ฑ๋กํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ!(๊ฐœ๋ฐœ์ž์˜ ํŽธ์˜์„ฑ๊ณผ ์ƒ์‚ฐ์„ฑ ์ฆ๋Œ€)
    • Stereotype Annotation์„ ์ด์šฉํ•ด์„œ Scan ๋Œ€์ƒ ๊ฐ์ฒด๋ฅผ ํ‘œ๊ธฐ
      • notion image
      • ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด๋“ค์€ excloude filters๋ฅผ ํ†ตํ•ด์„œ ์ œ๊ฑฐ ๊ฐ€๋Šฅ
  • Bean Scope
    • notion image
    • singleton
      • ๋‹จ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋งŒ ์ƒ์„ฑ๋จ.(Default)
    • prototype
      • ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ํƒ€์ž…์˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋จ.
      • @Scope ์ด์šฉ
        • @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
    • request
    • session
    • global session
  • Bean Life Cycle
    • Bean ์ƒ์„ฑ ์ƒ๋ช…์ฃผ๊ธฐ Callback
        1. @PostConstruct์ด ์ ์šฉ๋œ method ํ˜ธ์ถœ
        1. Bean์ด InitializingBean interface ๊ตฌํ˜„ ์‹œ afterPropertiesSet ํ˜ธ์ถœ
        1. @Bean์˜ initMethod ์— ์„ค์ •ํ•œ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ
         
    • Bean ์†Œ๋ฉธ ์ƒ๋ช…์ฃผ๊ธฐ Callback
        1. @PreDestory๊ฐ€ ์ ์šฉ๋œ method ํ˜ธ์ถœ
        1. Bean์ด DisposableBean interface ๊ตฌํ˜„ ์‹œ destory ํ˜ธ์ถœ
        1. @Bean์˜ destoryMethod์— ์„ค์ •ํ•œ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ
  • Enviroment Profile
    • ๋ชจ์˜๊ฐ์ฒด
    • Garbage Collector