πŸ‘Spring IoC, AOP, MVC μš”μ•½ μ •λ¦¬πŸ‘

Yeppi's 개발 일기·2022λ…„ 6μ›” 27일
0

Spring&SpringBoot

λͺ©λ‘ 보기
7/16
post-thumbnail
post-custom-banner

1. Spring IoC

IoC 의 μ•„λž˜ 두 가지 μ œμ–΄λŠ” μ»¨ν…Œμ΄λ„ˆκ°€ λ‹΄λ‹Ή

1) 객체 생성 μ œμ–΄

  • ServieImpl μœ„μ— @Service

  • DAOμœ„μ— @Respository
    μœ μ§€λ³΄μˆ˜ν•  λ•Œ λ³€κ²½ μ•ˆν•΄λ„ 됨

  • μ»¨νŠΈλ‘€λŸ¬μœ„μ— @Controller

πŸ‘‰ μœ μ§€λ³΄μˆ˜ν•  λ•Œ λ°”λ€ŒλŠ” κ°μ²΄λŠ” @ μ–΄λ…Έν…Œμ΄μ…˜ μ‚¬μš©
πŸ‘‰ μ•ˆλ°”λ€ŒλŠ” κ°μ²΄λŠ” <bean> 등둝


2) 객체간 μ˜μ‘΄κ΄€κ³„ μ œμ–΄

  • ServieImpl 객체가 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ²˜λ¦¬ν•  λ•Œ, DAO 클래슀λ₯Ό μ°Έμ‘°ν•œλ‹€
    β‡’ 의쑴 관계!
  • DAO 클래슀 없이 아무것도 ν•  수 μ—†λŠ” μƒνƒœ
  • μ΄λ ‡κ²Œ 의쑴 관계 μ£Όμž…ν•˜λŠ” 방법 3가지
    1. μƒμ„±μž μΈμ μ…˜
    2. μ„Έν„° μΈμ μ…˜
    3. νƒ€μž…μΈμ μ…˜(@Autowride, κ°€μž₯ νŽΈν•¨)

πŸ‘‰ IoCλŠ” 객체생성과 κ°μ²΄λ“€κ³Όμ˜ 관계/μ°Έμ‘°λ₯Ό μ»¨ν…Œμ΄λ„ˆκ°€ μ•Œμ•„μ„œ μ„€μ •ν•΄μ£ΌλŠ” 것



2. Spring AOP

1) ν•„μš” 이유

  • λΉ„μ¦ˆλ‹ˆμŠ€λ©”μ„œλ“œλ“€λ§ˆλ‹€ 곡톡 κΈ°λŠ₯ μ½”λ“œκ°€ ν•„μš”ν•œλ°, 맀우 반볡됨
  • μœ μ§€λ³΄μˆ˜κ°€ νž˜λ“€κ³ , 가독성 λ–¨μ–΄μ Έ, μ •μ±…λ°”κΎΈκΈ° 어렀움

πŸ‘‰ ν•΄κ²° λ°©μ•ˆ : 관심 뢄리



Advice

νš‘λ‹¨ 관심에 ν•΄λ‹Ήν•˜λŠ” κ³΅ν†΅μ˜ κΈ°λŠ₯ μ½”λ“œλ₯Ό
μ™ΈλΆ€μ˜ λ…λ¦½λœ ν΄λž˜μŠ€μ— λ©”μ„œλ“œ ν˜•νƒœλ‘œ κ΅¬ν˜„ν•œ 것


Pointcut

λΉ„μ¦ˆλ‹ˆμŠ€λ©”μ„œλ“œ 쀑에
λ‚΄κ°€ μ›ν•˜λŠ” λ©”μ„œλ“œλ§Œ μ •ν™•ν•˜κ²Œ ν•„ν„°λ§ν•œ 것

Aspect

Pointcut 에 ν•΄λ‹Ήν•˜λŠ” λΉ„μ¦ˆλ‹ˆμŠ€ λ©”μ„œλ“œκ°€ 호좜될 λ•Œ,
Advice 에 ν•΄λ‹Ήν•˜λŠ” λ©”μ„œλ“œκ°€ λ™μž‘ν•˜κΈ° μœ„ν•΄
Advice 와 Pointcut λ₯Ό μ—°κ²°ν•΄μ£ΌλŠ” 것


πŸ‘‰ AOPλŠ” λΉ„μ¦ˆλ‹ˆμŠ€ μ»΄ν¬λ„ŒνŠΈλ‚˜ μ›ν•˜λŠ” νŠΉμ • λΉ„μ¦ˆλ‹ˆμŠ€ λ©”μ„œλ“œμ— λŒ€ν•΄ κ³΅ν†΅λ‘œμ§μ„ μˆ˜ν–‰ν•˜λŠ” 것



πŸ‘μ‰¬μš΄ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 κ΄€λ¦¬πŸ‘

  • IoC 와 AOP λ₯Ό μ΄μš©ν•˜λ©΄? λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ‰½κ²Œ 관리할 수 μžˆλ‹€
  • IoC λ₯Ό μ΄μš©ν•˜λ©΄
    μžλ°”μ†ŒμŠ€μ½”λ“œ μˆ˜μ • 없이 ServiceImpl 객체와 DAO 객체λ₯Ό μ–Όλ§ˆλ“ μ§€ λ³€κ²½/ꡐ체 ν•  수 μžˆλ‹€
  • AOP λ₯Ό μ΄μš©ν•˜λ©΄
    μ˜ˆμ™Έμ²˜λ¦¬ κΈ°λŠ₯, λ‘œκΉ… κΈ°λŠ₯, νŠΈλžœμž­μ…˜ 관리 κΈ°λŠ₯ λ“± 곡톡 κΈ°λŠ₯듀을
    λΉ„μ¦ˆλ‹ˆμŠ€ λ©”μ„œλ“œμ—μ„œ λΆ„λ¦¬μ‹œν‚¨ ν›„ λ”°λ‘œ κ΄€λ¦¬ν•˜λ―€λ‘œ, 곡톡 κΈ°λŠ₯을 μœ μ§€λ³΄μˆ˜ν•˜κΈ° νŽΈν•˜λ‹€


3. Spring MVC

1) DispatcherServlet κ³Ό SpringConatiner

  • DispatcherServlet
    • λͺ¨λ“  λΈŒλΌμš°μ €μ˜ *.do μš”μ²­μ„ DispatcherServlet 이 λ°›μ•„μ˜¨λ‹€.
    • λ‹€λ₯Έ μ»¨νŠΈλ‘€λŸ¬λ³΄λ‹€ κ°€μž₯ λ¨Όμ € μš”μ²­μ„ λ°›μ•„μ˜€κΈ° λ•Œλ¬Έμ— DispatcherServlet λŠ” Front Controller 라고도 ν•œλ‹€.
    • ν”„λ‘ νŠΈλ₯Ό κ΅¬μ„±ν•˜λŠ” 컨트둀러(presentation-layer.xml, Controller, DispatcherServlet)κ°€ λ§Žμ§€λ§Œ,
      DispatcherServlet λŠ” λΈŒλΌμš°μ €μ˜ μš”μ²­μ„ κ°€μž₯ λ¨Όμ € λ°›μ•„λ“€μ΄λŠ” 졜초의 μ§„μž…μ /창ꡬ 이닀.
  • DispatcherServlet λŠ” presentation-layer.xml νŒŒμΌμ„ λ‘œλ”©ν•˜μ—¬, SpringContainer λ₯Ό μƒμ„±ν•œλ‹€.
  • Spring Conatiner κ°€ μƒμ„±λ˜λ©΄ Controller 객체가 λ©”λͺ¨λ¦¬μ— λœ¬λ‹€
  • 그러면 *.do μš”μ²­μ„ Controller 의 λ©”μ„œλ“œκ°€ μ²˜λ¦¬ν•  수 μžˆλ‹€
  • Controller λ©”μ„œλ“œλŠ” Service Interface λ₯Ό μ°Έμ‘°ν•˜μ—¬ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μˆ˜ν–‰ν•œλ‹€


2) μ£Όμ˜ν•  점

  • Controller κ°€ 직접 DAO λ©”μ„œλ“œλ₯Ό 직접 μ‹€ν–‰ν•˜λ©΄ μ•ˆλœλ‹€!
    1. λΉ„μ¦ˆλ‹ˆμŠ€ λ©”μ„œλ“œ, 즉 ServiceImpl 이 μ‹€ν–‰λ˜μ§€ μ•ŠκΈ° 떄문에 Advice 듀이 λ™μž‘ν•˜μ§€ μ•ŠλŠ”λ‹€
    2. DAO λ³€κ²½ μ‹œ, Controller λ©”μ„œλ“œ 쀑 DAO λ©€λ²„λ³€μˆ˜λ₯Ό μ „λΆ€ μˆ˜μ •ν•΄μ€˜μ•Ό ν•œλ‹€
  • Controller λŠ” Service Interface λ₯Ό ν†΅ν•΄μ„œ λΉ„μ¦ˆλ‹ˆμŠ€ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λ„λ‘ ν•˜μž
    • μˆ˜μ • μ‹œ, ServiceImpl 의 DAO 클래슀만 κ°ˆμ•„λΌμš°λ©΄ λœλ‹€
  • ServiceImpl 을 Conroller 보닀 λ¨Όμ € λ©”λͺ¨λ¦¬μ— λ„μ›Œμ€˜μ•Ό @Autowired 였λ₯˜κ°€ 생기지 μ•ŠλŠ”λ‹€.
  • servlet λŠ” λ ˆμ΄μ§€λ‘œλ”©
    필터와 λ¦¬μŠ€λ„ˆλŠ” ν”„λ¦¬λ‘œλ”©
    • ν•„ν„° : μ‚¬μ „μ²˜λ¦¬,μ‚¬ν›„μ²˜λ¦¬,μ„œλΈ”λ¦Ώ μˆ˜ν–‰μ‹œκ°„, 인코딩, 인증체크
    • λ¦¬μŠ€λ„ˆ : 이벀트, μ„œλΈ”λ¦Ώ μ»¨ν…Œμ΄λ„ˆ 생성 직전직후, μ„Έμ…˜ 객체 생성및 μ‚­μ œ 직전 직후


πŸ‘μ™œ Spring을 μ‚¬μš©ν•˜λ‚˜?πŸ‘

  • μžλ°” μ–Έμ–΄ 기반의 ν”„λ ˆμž„μ›Œν¬λ‘œμ„œ, 객체 지ν–₯ μ–Έμ–΄μ˜ νŠΉμ§•(μž₯점)을 잘 살렀냄
  • 쒋은 객체 지ν–₯ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 개발
    • μœ μ§€λ³΄μˆ˜ 편리 : ν”„λ‘œκ·Έλž¨μ„ μœ μ—°ν•˜κ²Œ λ³€κ²½ κ°€λŠ₯
    • λŒ€κ·œλͺ¨ ν”„λ‘œμ νŠΈμ— 유리
    • λ‹€ν˜•μ„±μœΌλ‘œ μ—­ν• κ³Ό κ΅¬ν˜„μ„ λΆ„λ¦¬ν•˜κ³  λ‹¨μˆœν•˜κ³  μœ μ—°ν•˜κ³  독립적인 개발
    • λ‹€ν˜•μ„±λ§ŒμœΌλ‘œλŠ” λΆ€μ‘±ν•œ OCP 와 DIP λ₯Ό Spring 적용으둜 μΆ©μ‘±
  • 쒋은 λΌˆλŒ€ = 쒋은 μ•„ν‚€ν…μ²˜λ₯Ό μ œκ³΅ν•œλ‹€
    • μ»¨ν…Œμ΄λ„ˆλ‘œ 객체λ₯Ό 효율적으둜 생성 관리
profile
imaginative and free developer. λ°±μ—”λ“œ / UX / DATA / κΈ°νšμ— κ΄€μ‹¬μžˆμ§€λ§Œ κ³ μ–‘μ΄λŠ” μ—†λŠ” μ˜ˆλΉ„ κ°œλ°œμžπŸ‘‹
post-custom-banner

0개의 λŒ“κΈ€