프로젝트를 진행하면서 기능을 구현할 때 예외가 발생하는 경우가 종종 있었다.그때는 마냥 throws를 이용해 예외를 던지거나 try catch를 이용하는 선에서 그쳤지, 예외를 어떻게 처리해야 하는지, 구조는 어떻게 되어있고, 각 예외의 차이는 무엇인지 하는 것에 대해