Dev-Kyuu
article thumbnail

 πŸ” μŠ€ν”„λ§ μ‹œνλ¦¬ν‹°λ₯Ό μ‚¬μš©ν•΄ νšŒμ›κ΄€λ¦¬ν•˜λŠ” 방법을 μˆœμ„œλ„λ₯Ό 톡해 정리해 λ³΄μ„Έμš”.

  • νšŒμ›κ°€μž…, 둜그인, 둜그인 μœ μ§€ λ°©λ²•μœΌλ‘œ λ‚˜λˆ μ„œ 정리
  • 4개의 λͺ¨λ“ˆ (Client, Server, Session, DB) 둜 λ‚˜λˆ„μ–΄ 정리


 πŸ” λ‹¨μœ„ ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„± μ‹œ μž₯/단점을 정리해 λ³΄μ„Έμš”.

 

λ‹¨μœ„ ν…ŒμŠ€νŠΈ(Unit Test)

  • ν•˜λ‚˜μ˜ λͺ¨λ“ˆμ„ κΈ°μ€€μœΌλ‘œ λ…λ¦½μ μœΌλ‘œ μ§„ν–‰λ˜λŠ” κ°€μž₯ μž‘μ€ λ‹¨μœ„μ˜ ν…ŒμŠ€νŠΈλ₯Ό λ§ν•˜λ©°, 일반적으둜 μ‹€λ¬΄μ—μ„œ ν…ŒμŠ€νŠΈ μ½”λ“œλΌ 함은 λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό μ˜λ―Έν•œλ‹€.
  • ν”„λ‘œκ·Έλž¨μ„ μž‘μ€ λ‹¨μœ„λ‘œ μͺΌκ°œ μ–΄λ””μ„œ λ¬Έμ œκ°€ λ°œμƒν–ˆλŠ”μ§€ μ •ν™•ν•˜κ²Œ λ™μž‘ν•˜λŠ”μ§€ λΉ λ₯΄κ²Œ 확인 κ°€λŠ₯ν•΄ 디버깅 μ‹œκ°„ 단좕할 수 μžˆλ‹€.
  • λ¦¬νŽ™ν† λ§μ„ ν•˜μ—¬λ„ μž‘μ€ κΈ°λŠ₯ ν˜Ήμ€ λ©”μ†Œλ“œ λ‹¨μœ„μ΄κΈ°μ— λΉ λ₯΄κ²Œ 문제 μ—¬λΆ€λ₯Ό νŒŒμ•…ν•˜μ—¬ μ•ˆμ •μ„±μ„ 확보할 수 μžˆλ‹€.
  • ν…ŒμŠ€νŠΈμ— λŒ€ν•œ μ‹œκ°„κ³Ό λΉ„μš©μ„ μ ˆμ•½ ν•  수 μžˆλ‹€.

<aside> πŸ’‘ μ’‹κ³  κΉ¨λ—ν•œ ν…ŒμŠ€νŠΈ μ½”λ“œκ°€ λ”°λ₯΄λŠ” FIRST κ·œμΉ™

β‘  Fast : ν…ŒμŠ€νŠΈλŠ” λΉ λ₯΄κ²Œ λ™μž‘ν•˜λ©° 자주 돌릴 수 μžˆμ–΄μ•Ό ν•œλ‹€.

β‘‘ Independent : 각각의 ν…ŒμŠ€νŠΈλŠ” 독립적이며 μ„œλ‘œ μ˜μ‘΄ν•˜λ©΄ μ•ˆλœλ‹€.

β‘’ Repeatable : μ–΄λŠ ν™˜κ²½μ—μ„œλ„ 반볡 κ°€λŠ₯ν•΄μ•Ό ν•œλ‹€.

β‘£ Self-Validation :  ν…ŒμŠ€νŠΈλŠ” boolκ°’μœΌλ‘œ κ²°κ³Όλ₯Ό 좜λ ₯ν•΄ 자체 검증이 λ˜μ–΄μ•Ό ν•œλ‹€.

β‘€ Timely : μ‹€μ œ μ½”λ“œλ₯Ό κ΅¬ν˜„ν•˜κΈ° 직전에 κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€.

</aside>

단점 :

  • ν…ŒμŠ€νŠΈ μ½”λ“œκΉŒμ§€ μž‘μ„±ν•΄μ•Όν•΄ 개발 μ‹œκ°„μ΄ κΈΈμ–΄μ§„λ‹€.
  • μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ³€κ²½ 사항을 ν…ŒμŠ€νŠΈ μ½”λ“œμ—λ„ μ μš©ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— 이에 λŒ€ν•œ μœ μ§€λ³΄μˆ˜ 뢀담이 μ¦κ°€ν•œλ‹€.

AOPλž€ 무엇인가?

 

🎟 AOP ?

: AOP(Aspect Oriented Programming) 관점지ν–₯ ν”„λ‘œκ·Έλž˜λ°

: μ–΄λ–€ λ‘œμ§μ„ κΈ°μ€€μœΌλ‘œ 핡심적인 관점, 뢀가적인 κ΄€μ μœΌλ‘œ λ‚˜λˆ„μ–΄ κ·Έ 관점을 κΈ°μ€€μœΌλ‘œ 각각 λͺ¨λ“ˆν™”ν•˜μ—¬ κ°œλ°œν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° 기법

μœ„ 그림에 μžˆλŠ” λΈ”λŸ­λ“€ 처럼 μ†ŒμŠ€μ½”λ“œ μƒμ—μ„œ λ°˜λ³΅λ˜λŠ” μ½”λ“œλ“€μ„ 흩어진 κ΄€μ‹¬μ‚¬λΌκ³ ν•˜κ³ ,

흩어진 관심사λ₯Ό Aspect둜 λͺ¨λ“ˆν™” + 핡심 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ—μ„œ λΆ„λ¦¬ν•˜μ—¬ μž¬μ‚¬μš©ν•˜λŠ”κ²ƒμ΄ AOP의 취지이닀.

 

 πŸ“’ AOP둜 λ‚˜λ‰˜μ–΄μ§€λŠ” 개발의 두 μ’…λ₯˜ 관점

  • 업무
  • 업무 이외 λΆ€κ°€ κΈ°λŠ₯(둜직, μ˜ˆμ™Έμ²˜λ¦¬)

 

 

πŸ“ Aspect?

: 흩어진 관심사λ₯Ό λ¬Άμ–΄μ„œ λͺ¨λ“ˆν™” ν•œκ²ƒμœΌλ‘œ Advice와 Point Cut이 λ“€μ–΄κ°„λ‹€.

  • Advice : 해야할일듀에 λŒ€ν•œ 정보λ₯Ό κ°€μ§€κ³  있음
  • Join Point : λ©”μ„œλ“œ μ‹€ν–‰ μ‹œμ μœΌλ‘œ Advice μ μš©μœ„μΉ˜ / λΌμ–΄λ“œλŠ” 지점 / λ“±λ“±μ˜ 정보λ₯Ό κ°€μ§€κ³ μžˆμŒ
  • Point Cut : Join Point의 상세 μŠ€νŒ©μ„ μ •μ˜ν•œκ²ƒ μ–΄λ–€ ν΄λž˜μŠ€μ— μ–΄λ–€ λ©”μ„œλ“œλ₯Ό μ μš©ν• λ•Œ ν˜ΈμΆœν•΄λΌ! λΌλŠ” 정보λ₯Ό κ°€μ§€κ³ μžˆλ‹€.

κ·Έλž˜μ„œ AOPκ°€ 뭔데!

AOPλž€ μ‚¬μš©μžκ°€ ν•„μš”λ‘œν•˜λŠ” μ—­ν• κ³Ό 이것을 λŒ€μƒμœΌλ‘œ 뢀가적인 ν–‰μœ„λ₯Ό ν•˜λŠ” 역할을 κ΅¬λΆ„μ§“λŠ” 것이닀.

AOPλ₯Ό 톡해 각 역할이 μˆ˜ν–‰ν•΄μ•Ό ν•˜λŠ” ν–‰μœ„λ“€μ—λ§Œ μ§‘μ€‘ν•΄μ„œ κ°œλ°œμ„ ν•  수 μžˆλŠ” μž₯점이 생긴닀.

 


πŸ—„ νŠΈλžœμž­μ…˜?

νŠΈλžœμž­μ…˜μ€ λ°μ΄ν„°λ² μ΄μŠ€ 관리 μ‹œμŠ€ν…œμ΄λ‚˜, μœ μ‚¬ν•œ μ‹œμŠ€ν…œμ—μ„œμ˜ μƒν˜Έμž‘μš© λ‹¨μœ„λ‘œ

λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ‹€λ£° λ•Œ νŠΈλžœμž­μ…˜μ„ μ μš©ν•˜λ©΄ 데이터 μΆ”κ°€, κ°±μ‹ , μ‚­μ œ λ“±μœΌλ‘œ 이루어진 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ‹€κ°€

처리 쀑 였λ₯˜κ°€ λ°œμƒν–ˆμ„ λ•Œ λͺ¨λ“  μž‘μ—…μ„ μ›μƒνƒœλ‘œ 되돌렀주고, λͺ¨λ“  μž‘μ—…μ΄ μ„±κ³΅ν•΄μ•Όλ§Œ μ΅œμ’…μ μœΌλ‘œ λ°μ΄ν„°λ² μ΄μŠ€μ— λ°˜μ˜ν•˜λŠ” 역할을 함 μŠ€ν”„λ§μ€ μ–΄λ…Έν…Œμ΄μ…˜μ„ μ΄μš©ν•œ νŠΈλžœμž­μ…˜ 처리λ₯Ό μ§€μ›ν•œλ‹€.

 

πŸŒ€Transactional μ–΄λ…Έν…Œμ΄μ…˜

ν•΄λ‹Ή μ–΄λ…Έν…Œμ΄μ…˜μ€ ν΄λž˜μŠ€λ‚˜, λ©”μ„œλ“œμ— 뢙여쀄 겨우 ν•΄λ‹Ή λ²”μœ„ λ‚΄ λ©”μ„œλ“œκ°€ νŠΈλžœμž­μ…˜μ΄ λ˜λ„λ‘ 보μž₯ν•œλ‹€.

이와같이 μ‚¬μš©ν•˜λŠ”κ²ƒμ„ 선언적 νŠΈλžœμž­μ…˜μ΄λΌκ³ ν•˜κ³ , 객체λ₯Ό λ§Œλ“€ ν•„μš” 없이 μ„ μ–Έλ§ŒμœΌλ‘œ 관리λ₯Ό μš©μ΄ν•˜κ²Œ ν•œλ‹€.

 

❓ Transactional μ–΄λ…Έν…Œμ΄μ…˜μ˜ μž‘λ™ 원리와 흐름

  • @Transactional이 뢙은 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  κ²½μš°μ—λŠ” Spring은 ν•΄λ‹Ή λ©”μ„œλ“œμ— λŒ€ν•œ ν”„λ‘μ‹œλ₯Ό λ§Œλ“ λ‹€.( ν”„λ‘μ‹œ νŒ¨ν„΄ : μ–΄λ–€ μ½”λ“œλ₯Ό κ°μ‹Έλ©΄μ„œ 좔가적인 연산을 μˆ˜ν–‰ν•˜λ„λ‘ κ°•μ œν•˜λŠ” 방법)
  • νŠΈλžœμž­μ…˜μ˜ 경우 νŠΈλžœμž­μ…˜μ˜ μ‹œμž‘κ³Ό μ—°μ‚° μ’…λ£Œμ‹œ ν„°λ°‹μ˜ 과정이 ν•„μš”ν•˜λ―€λ‘œ ν”„λ‘μ‹œλ₯Ό 생성해 λ©”μ„œλ“œ μ•ž 뒀에 μΆ”κ°€ν•˜κ³ , ν•΄λ‹Ή μ½”λ“œλ‚΄μ˜ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ μ˜μ†μ„± μ»¨ν…μŠ€νŠΈκ°€ μƒκ²¨λ‚œλ‹€.
  • μ˜μ†μ„± μ»¨ν…μŠ€νŠΈλŠ” νŠΈλžœμž­μ…˜ ν”„λ‘μ‹œ(AOP)κ°€ νŠΈλžœμž­μ…˜μ„ μ‹œμž‘ν•  λ•Œ μƒκ²¨λ‚˜κ³ , λ©”μ„œλ“œκ°€ μ’…λ£Œλ˜μ–΄ AOPκ°€ μ—°μ‚° 결과에 λŒ€ν•΄ 컀밋 ν•  경우 μ˜μ†μ„± μ»¨ν…μŠ€νŠΈκ°€ Flush λ˜λ©΄μ„œ ν•΄λ‹Ή λ‚΄μš©μ΄ 반영되고, 이후 μ»¨ν…μŠ€νŠΈκ°€ μ’…λ£Œλœλ‹€.

 

'β›΄ ν•­ν•΄' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

πŸ₯²  (0) 2022.12.23
[ν•­ν•΄99. 5μ£Όμ°¨ - WIL]  (0) 2022.12.19
ETC | Github으둜 ν˜‘μ—…ν•˜κΈ°  (0) 2022.12.15
[ν•­ν•΄99. 4μ£Όμ°¨ - WIL]  (0) 2022.12.11
*. 였늘의 μš”μ•½  (2) 2022.12.09
profile

Dev-Kyuu

@kyuu_ng

ν¬μŠ€νŒ…μ΄ μ’‹μ•˜λ‹€λ©΄ "μ’‹μ•„μš”β€οΈ" λ˜λŠ” "κ΅¬λ…πŸ‘πŸ»" ν•΄μ£Όμ„Έμš”!