개발자 노트

Exception handling 여정 본문

이것저것

Exception handling 여정

jurogrammer 2021. 7. 3. 11:11

첫걸음

exception은 예외 상황이라 볼 수 있습니다.

oracle docs 발췌
An exception is an event, which occurs during the execution of a program, that disrupts the normal flow of the program's instructions.

따라서 개발자가 exception이 발생한 상황을 이해할 수 있도록 exception 메세지를 제공해주어야 합니다. 또한, API를 Call한 클라이언트에게는 개발자와는 다른 메세지를 전달해줄 수 있어야 하죠.

그래서 문제를 정리하면 다음과 같았습니다.

  1. 개발자가 어디에서 log를 볼 수 있는지.
  2. 사용자에게 어떻게 내부 메세지를 분리해서 전달해줄 수 있는지
  3. 이해하기 쉬운 exception 메세지를 어떻게 보여줘야할 지

이 페이지는 exception 여정을 보여주는 페이지라 보시면 됩니다. index페이지죠. 따라서 어떤 고민들을 했고 어떻게 해결했는지 그 과정을을 나열하고 자세한 내용은 링크를 첨부하도록 하겠습니다.

1.  도대체 어떻게 콘솔이나 파일에 로그가 남겨지지...?

1번이 고민할 거리인가? 싶으실 수 있다만... 자바에서 System.out.println을 찍어도 aws 환경에 따라 어쩔 땐 콘솔로, 어쩔 땐 파일로 남더라구요? 그리고 어쩔 땐 err.log파일이 남아요. 그래서 내가 로그를 남긴 다지만 어디에 남는거지..? 라는 고민이 있었습니다.  그리고 목적에 따라 log를 다르게 저장해야 할 수도 있으니까요.

따라서 문제를 단순화시키기 위해 가장 기본으로 돌아와 다음 질문에 답해보려고 합니다.

"어떻게 내가 입력한 값이 어떻게 콘솔에 출력될까?"

이 고민 및 해결은 다음 url에서 확인하실 수 있습니다.

키보드로 입력한 값이 콘솔로 출력될 때 까지 과정

위 고민을 통해 알게된 개념은 redirection과 pipeline인데요, redirection에 대해 좀 더 파보았죠.

redirection

위 두 가지 주제를 파보면서 이제 명확해졌죠. aws에서는 표준출력을 .log에, 표준 에러를 err.log로 redirection한다는 것을요. 그리고 추가로 logback에서 로그를 error 레벨로 남겼더라도 표준 출력으로 내보냅니다.

그리고 이러한 생각도 가능합니다. 표준 출력이라고 추상화가 가능하다면, 로그 라이브러리들은 slack으로도 exception을 보내줄 수 있지 않을까? 했는데, 그것도 가능하더라구요 ㅎㅎ 애당초 유닉스에서 data stream으로 추상화한 시점에서 socket으로 값을 쓸 수 있다는 뜻이 되니까요.
1번 고민을 통해 로그의 출력 경로 전략에 대해 생각할 수 있게 되었습니다.

2. 자바의 익셉션처리에 대해

다음으로 알아볼 내용은 java에서 exception을 어떻게 처리할 것이냐? 입니다. 실무에서 스프링 부트를 사용하기 때문에 자바를 기준으로 설명을 드리도록 하겠습니다. 이 주제에서 다루는 스킬은 java specific할 수 있으나 고민, 해결 방법의 본질은 다르지 않다고 생각이 드네요. 

자바에서 지원하는 exception handing 도구

다음으로는 exception handling에 대한 지식을 바탕으로 제가 실무에서 작성했던 코드와 유사한 코드를 리팩토링해볼 것입니다.

 

3. 더 나은 코드

코드를 리팩토링 해보자.

 

반응형
Comments