μ˜ˆμ™Έ 처리/μ—λŸ¬ 핸듀링 μž˜ν•˜κΈ°

μ•ˆλ…•ν•˜μ„Έμš”, μ˜€λŠ˜μ€ μ˜ˆμ™Έ 처리(μ—λŸ¬ 핸듀링)에 λŒ€ν•΄μ„œ μ–˜κΈ°λ₯Ό ν•΄λ³ΌκΉŒ ν•©λ‹ˆλ‹€.

책에 λ‚˜μ˜€λŠ” λ˜λŠ” 인터넷 μƒμ—μ„œ κ°„λž΅ν•˜κ²Œ μ„€λͺ…ν•˜λŠ” try-catch μ˜ˆμ™Έμ²˜λ¦¬μ— λŒ€ν•œ λ‚΄μš©μ€ μ•„λ‹ˆκ³  직접 κ°œλ°œμ„ μ§„ν–‰ν•˜λ©΄μ„œ κ²½ν—˜ν•œ λ‚΄μš©μ„ ν† λŒ€λ‘œ μ΄λ ‡κ²Œ ν•˜λ©΄ μ’‹κ² λ‹€ 싢은 λ‚΄μš©λ“€μ„ κ³΅μœ ν•˜λŠ” μ°¨μ›μ—μ„œ μž‘μ„±ν•˜λŠ” κΈ€μž…λ‹ˆλ‹€. ν˜Ήμ—¬λ‚˜ 더 쒋은 λ°©λ²•μ΄λ‚˜ κ³΅μœ ν•΄μ£Όμ‹œκ³  싢은 λ‚΄μš©μ΄ μžˆλ‹€λ©΄ λŒ“κΈ€λ„ ν™˜μ˜ν•©λ‹ˆλ‹€.

 

μš°μ„  μžλ°” μ„œμ μ΄λ‚˜ ꡬ글링을 ν•΄μ„œ μ°ΎλŠ” μ—λŸ¬ 핸듀링에 λŒ€ν•œ λ‚΄μš©λ“€μ€ λŒ€λΆ€λΆ„ try-catch 문을 μ‚¬μš©ν•˜λ©΄ λœλ‹€μ—μ„œ λλ‚©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ λ‹¨μˆœνžˆ κ·Έλ ‡κ²Œ μž‘μ—…ν•˜λ©΄ μ—λŸ¬ 핸듀링을 μž˜ν•œλ‹€κ³  ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

λ³΅μž‘ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ κ΅¬ν˜„ν•˜λ‹€λ³΄λ©΄ μ—¬λŸ¬ ν΄λž˜μŠ€λ“€μ„ λ„˜λ‚˜λ“€λ©΄μ„œ μ—¬λŸ¬ λ©”μ„œλ“œλ“€μ„ 거치게 λ©λ‹ˆλ‹€.

λΉ„μ¦ˆλ‹ˆμŠ€ 둜직의 λ©”μ„œλ“œ 콜 체인

μœ„ λ©”μ„œλ“œ 콜 체인은 ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€(κΈ°λŠ₯)이 처리될 λ•Œμ˜ κ³Όμ •μ˜ μΌλΆ€μž…λ‹ˆλ‹€. 예λ₯Όλ“€λ©΄ controller -> service -> dao 뭐 이런 κ±΄λ°μš”, 아무리 λ³΅μž‘ν•œ μ„œλΉ„μŠ€λΌ ν•˜λ”λΌλ„ κ²°κ΅­ μš”μ²­μ—μ„œλΆ€ν„° 응닡을 μ£ΌκΈ°κΉŒμ§€μ˜ 과정은 κ²°κ΅­ μœ„ 그림처럼 ν•œ μ€„λ‘œ 연결이 κ°€λŠ₯ν•˜μ£ .

 

λ”°λΌμ„œ μ–΄λŠ μ‹œμ μ— try-catch 둜 μ˜ˆμ™Έλ₯Ό μž‘μ•„μ•Ό 할지 그리고 μ˜ˆμ™Έλ₯Ό μž‘μ•˜λ‹€λ©΄ μ–΄λ–€ 처리λ₯Ό 해야할지에 λŒ€ν•΄ λ§Žμ€ 고민이 ν•„μš”ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ 싀상 그런 고민을 λ³„λ‘œ ν•˜μ§€ μ•Šκ³  λŒ€μΆ© μ—λŸ¬λ‘œκ·Έ μ°μ–΄λ†“λŠ” κ°œλ°œμžλ“€μ΄ λ§Žμ€ 것이 사싀이죠. 심지어 catch둜 μž‘μ•„μ„œ 둜그만 남기고 λ‹€μ‹œ throwλ₯Ό ν•˜κΈ°λ„ ν•©λ‹ˆλ‹€. 무슨 ν­νƒ„λŒλ¦¬κΈ° ν•˜λŠ” 것도 μ•„λ‹ˆκ³  말이죠 -_-;; μ΅œμ•…μž…λ‹ˆλ‹€. κ·Έλ ‡κ²Œ 개발된 μ„œλΉ„μŠ€λŠ” ν•˜λ‚˜μ˜ μ—λŸ¬μ— λŒ€ν•΄μ„œ μ€‘λ³΅μ μœΌλ‘œ μ—¬λŸ¬κ°œμ˜ 둜그λ₯Ό λ‚¨κΈ°λŠ” 것을 확인할 수 있고 디버깅도 λΉ„νš¨μœ¨μ μœΌλ‘œ λ§Œλ“€μ–΄ λ²„λ¦½λ‹ˆλ‹€. 그럼 μ–΄λ–»κ²Œ ν•˜λŠ” 것이 쒋은 κ²ƒμΌκΉŒμš”?

 

첫 λ²ˆμ§ΈλŠ” μš”μ²­μ„ λ°›μ•„μ„œ 응닡을 μ£ΌκΈ°κΉŒμ§€ ν•˜λ‚˜μ˜ μ²΄μΈμ—μ„œ νŠΉμ • μ˜ˆμ™Έμ— λŒ€ν•œ μ²˜λ¦¬λŠ” ν•œ κ³³μ—μ„œλ§Œ ν•˜λ„λ‘ ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. 즉, μœ„ 체인 κ·Έλ¦Όμ—μ„œ λ©”μ„œλ“œ 1, 2, 3, 4 쀑 ν•˜λ‚˜μ˜ λ©”μ„œλ“œμ—μ„œλ§Œ AλΌλŠ” μ˜ˆμ™Έμ— λŒ€ν•œ 처리λ₯Ό ν•œλ‹€λŠ”κ±°μ£ . 컨트둀러 λΆ€λΆ„μ—μ„œ ExceptionHandlerλ₯Ό μ΄μš©ν•΄μ„œ μ²˜λ¦¬ν•  μˆ˜λ„ 있고 μ„œλΉ„μŠ€ λ ˆμ΄μ–΄μ—μ„œ try-catch 문을 μ΄μš©ν•΄μ„œ μ²˜λ¦¬ν•΄λ„ λ©λ‹ˆλ‹€. λ©”μ„œλ“œ3μ—μ„œ μ˜ˆμ™Έμ²˜λ¦¬λ₯Ό ν•΄λ†“μ•˜λŠ”λ° λΆˆν•„μš”ν•˜κ²Œ λ©”μ„œλ“œ2μ—μ„œ 또 ν•˜κ³  μžˆλ‹€κ±°λ‚˜ ν•œλ‹€λ©΄ λ‘˜ 쀑 ν•˜λ‚˜λ₯Ό μ œκ±°ν•˜λŠ”κ²Œ μœ μ§€λ³΄μˆ˜ν•˜λŠ”λ° 큰 도움이 λ©λ‹ˆλ‹€.

 

두 λ²ˆμ§ΈλŠ” catchλ₯Ό ν–ˆμœΌλ©΄ μ μ ˆν•œ 처리λ₯Ό ν•΄μ€˜μ•Ό ν•œλ‹€λŠ” κ²λ‹ˆλ‹€. μ—¬κΈ°μ„œ "μ μ ˆν•œ" μ΄λΌλŠ” 말이 애맀할 수 μžˆλŠ”λ°μš”, λ‹¨μˆœνžˆ 둜그만 찍고 catchν•œ μ˜ˆμ™Έλ₯Ό λ‹€μ‹œ throw ν•˜κ³ μžˆλ‹€λ©΄ ν•΄λ‹Ή try-catch문은 μ“Έλͺ¨μ—†λŠ” 것일 κ°€λŠ₯성이 99.9%μž…λ‹ˆλ‹€. 그런 경우라면 calleeμ—μ„œλ§Œ catchν•΄μ„œ 둜그λ₯Ό 남기고 μ μ ˆν•œ 처리λ₯Ό ν•˜λŠ”κ²Œ 더 κΉ”λ”ν•©λ‹ˆλ‹€. ꡳ이 두 κ΅°λ°μ„œ λ‚˜λˆ„μ–΄ catchν•  ν•„μš”κ°€ μ—†λ‹€λŠ” κ±°μ£ . 또, μ–΄λ–€ μ˜ˆμ™ΈλŠ” μž‘μ•„μ„œ 둜그만 남기고 λ¬΄μ‹œν•  μˆ˜λ„ 있고 (μ˜΅μ…”λ„ 값이 μ—†λ‹€κ±°λ‚˜ ν•˜λŠ” 경우), μ–΄λ–€ μ˜ˆμ™ΈλŠ” λ””λ²„κΉ…μš© 둜그λ₯Ό 남기고 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ λ‘€λ°±ν•˜λŠ” 처리λ₯Ό ν•΄μ•Όν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. ν•΄λ‹Ή ν”„λ‘œμ„ΈμŠ€λ₯Ό 진행함에 μžˆμ–΄μ„œ μ–΄λ–»κ²Œ μ²˜λ¦¬ν•΄μ•Ό ν•  μ§€λŠ” APIμŠ€νŽ™ λ˜λŠ” 정책에 따라 λ‹¬λΌμ§ˆ κ²λ‹ˆλ‹€.

 

λ§ˆμ§€λ§‰μœΌλ‘œ, μ˜ˆμ™Έκ°€ λ°œμƒν–ˆμ„ 경우 λ””λ²„κΉ…μš© 둜그λ₯Ό λ‚¨κΈ°κΈ°λ‘œ ν–ˆλ‹€λ©΄ 정말 ν•„μš”ν•œ μ •λ³΄λ§Œ 가독성 있게 둜그λ₯Ό λ‚¨κΈ°λŠ” κ²ƒμž…λ‹ˆλ‹€. ν•œ μ€„μ˜ 둜그만 잘 남겨도 λ””λ²„κΉ…ν•˜κΈ° 쉽도둝 μž‘μ„±ν•˜λ©΄ μœ μ§€λ³΄μˆ˜ νš¨μœ¨μ„± 뿐만 μ•„λ‹ˆλΌ λ‘œκΉ… μ‹œμŠ€ν…œμ— λΆ€ν•˜λ„ 쀄일 수 있게 λ©λ‹ˆλ‹€.

 

제 κ²½ν—˜μ„ ν† λŒ€λ‘œ μ‹ μž… λ˜λŠ” μ£Όλ‹ˆμ–΄ 개발자 λΆ„λ“€κ»˜μ„œ μ΄λ ‡κ²Œ ν•΄λ³΄μ‹œλ©΄ μ’‹κ² λ‹€λŠ” μƒκ°μœΌλ‘œ 끄적여 λ³΄μ•˜μŠ΅λ‹ˆλ‹€.

 

ν˜Ήμ‹œ 이 글을 μ½μœΌμ‹œλ‹€κ°€ 멋진 λ…Έν•˜μš°κ°€ μžˆμœΌμ‹  뢄듀은 λŒ“κΈ€λ‘œ 곡유 λΆ€νƒλ“œλ €μš” ^-^