TIL 23.11.21

ν™©μ€ν•˜Β·2023λ…„ 11μ›” 21일
0

TIL

λͺ©λ‘ 보기
118/146

πŸ“ŒToday I Learned

Spring

Spring AOP, Aspect Oriented Programming

  • 관점 지ν–₯ ν”„λ‘œκ·Έλž˜λ°
  • 관점(=관심사) > 업무 κ΅¬ν˜„ μ‹œ 주업무가 μ•„λ‹Œ λ‚˜λ¨Έμ§€ 보쑰 업무
  • 주업무 vs 보쑰업무

[κ²Œμ‹œνŒ κΈ€μ“°κΈ°]

  1. κΈ°μ‘΄ 방식
    • add.do
      a. κΈ€μ“°κΈ° > 주업무
      b. κΆŒν•œ 체크 > 보쑰업무
    • 주업무와 보쑰업무λ₯Ό 같은 κ³³μ—μ„œ κ΅¬ν˜„(ν•œ νŒŒμΌμ—μ„œ κ΅¬ν˜„)
    • 단점 > μ½”λ“œ 관리 뢈편(μ–΄λ””~μ–΄λ””? 주업무? 보쑰업무?)
  2. AOP 방식
    • add.do
    • 주업무와 보쑰업무λ₯Ό λΆ„λ¦¬μ‹œμΌœμ„œ λ”°λ‘œ κ΅¬ν˜„(물리적으둜 뢄리)
    • μŠ€ν”„λ§μ„ ν†΅ν•΄μ„œ 주업무와 보쑰업무λ₯Ό λ‹€μ‹œ κ²°ν•© ν›„ λ™μž‘

Spring AOP μš©μ–΄

  1. Core Concern
    • λΉ„μ¦ˆλ‹ˆμŠ€ μ½”λ“œ, 주업무
  2. Cross-cutting Concern
    • 보쑰업무(주업무 도쀑에 λΌμ–΄μ„œ λ“€μ–΄μ˜€λŠ” 업무)
  3. Target
    • λΉ„μ¦ˆλ‹ˆμŠ€ 업무λ₯Ό μ†Œμœ ν•œ 객체
  4. Proxy
    • Target을 κ°μ‚¬λŠ” λŒ€λ¦¬ 객체
  5. JoinPoint
    • Target이 가진 주업무(λ©”μ†Œλ“œ)
  6. Pointcut
    • 보쑰업무와 νŠΉμ • JoinPointλ₯Ό μ—°κ²°ν•˜λŠ” μž‘μ—…
  7. Aspect
    • 보쑰업무λ₯Ό κ΅¬ν˜„ν•˜λŠ” 객체
  8. Advice
    - 주업무가 μ‹œν–‰λ˜λŠ” μ–΄λŠ μ‹œμ μ— 보쑰업무λ₯Ό 싀행할지?
    a. Before Advice (μ€‘μš”)
    b. After Advice (μ€‘μš”)
    c. Around Advice
    d. After-returning Advice
    e. After-throwing Advice

Spring AOP κ΅¬ν˜„

  • "com.test.spring.aop1" νŒ¨ν‚€μ§€
    > "Main.java" //메인
    > "Memo.java"(I) //메인 업무 객체(μΈν„°νŽ˜μ΄μŠ€)
    > "MemoImpl.java"(C) //메인 업무 객체(클래슀)
    > "Logger.java"(C) //보쑰 업무 객체(클래슀)
    > "memo.xml" //μŠ€ν”„λ§ μ„€μ • 파일

계측 <-> 계측

Controller <-> DAO

IBoardDAO dao = new BoardDAO(); -> κ³ μš©ν•˜λŠ” κ»λ°κΈ°λŠ” μΈν„°νŽ˜μ΄μŠ€λ‘œ λ§Œλ“ λ‹€. μΈμŠ€ν„΄μŠ€ν™” ν•˜μ§€ 말고 μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜μž.
dao.add(dto)

Controller <-> View


μƒˆ ν”„λ‘œμ νŠΈ λ§Œλ“€κΈ°

  • New > Spring Legacy Project > Spring MVC Project > "WebTest" > "com.test.spring" > Finish

Spring MVC Project

  • μŠ€ν”„λ§ 기반 MVC μ›Ή ν”„λ‘œμ νŠΈ κ΅¬ν˜„

νŒ¨ν‚€μ§€

  • "com.test.spring.controller" > μš”μ²­ λ‹΄λ‹Ή

Servlet/JSP

  • μ›Ή μš”μ²­ 처리 + ν†΅μ œ > Controller μ—­ν• 

μŠ€ν”„λ§ MVC

  • Controller

  • com.test.spring.controller > "Ex01Controller.java"

  • views > "ex01.jsp"


DispatcherServlet(λ©΄μ ‘μ§ˆλ¬Έ)
Front-Controller(λ©΄μ ‘μ§ˆλ¬Έ)


의쑴 μ£Όμž… μΆ”κ°€

  • com.test.spring.controller > "Ex02Controller.java"
  • "com.test.spring.persistence" > "SpringDAO.java"(I)
    > "SpringDAOImpl.java(C)
  • views > "ex02.jsp"

xml μˆ˜μ • μ‹œ λ°˜λ“œμ‹œ μ„œλ²„λ₯Ό 껐닀가 μΌœμ•Ό λ°˜μ˜λœλ‹€.

profile
μ°¨κ·Όμ°¨κ·Ό ν•˜λ‚˜μ”©

0개의 λŒ“κΈ€