2022. 6. 16. 17:22ㆍ[Spring]_
Exception 이란?
Error 와 Exception 의 차이는 개발자의 의도인지 아닌지 라고 생각합니다.
Error 같은 경우에는 시스템의 심각한 오류, 서버 다운 등
말 그대로 에러인 경우이고, 시스템 레벨에서 일어납니다.
개발자가 의도하거나, 예상 할 수 없습니다.
Exception 의 경우에는 개발자가 작성한 코드 안에서 일어나는 것들을 말합니다.
개발자가 미리 알고, 예상 할 수 있는 범위를 뜻합니다.
Error 의 경우 개발자가 예측하여 해결할수 없습니다.
따라서 개발자는 자기가 작성한 코드 내에서 일어날 수 있는 예외를 생각해야 하고,
코드를 작성할 때 예외가 충분히 일어날 수 있는 곳에는 예외처리를 해줘야 합니다.
Exception 의 종류
예외에는 크게 2가지 종류가 있습니다.
Checked Exception : RuntimeException 을 상속받지 않는 Exception 들 이며, 해당 예외처리는 반드시 try catch 문으로 감싸서 예외처리를 해줘야 합니다. 그렇지 않을 경우에는 컴파일 오류가 발생하고, 멈추게 됩니다.
RuntimeException : Checked Exception 이 아닌것들이며, 해당 예외는 시스템을 멈추게 하진 않습니다.
지정한 Exception 종류의 오류에 런타임 예외가 발생합니다.
Exception 처리
1. 예외 복구
try catch finally 을 활용하여 예외처리가 날 곳을 예상하고 오류가 나지 않도록 다른 로직으로 유도 합니다.
String key ="";
try{
BoardService.boardInsert(params);
}catch (PersistenceException e){
logger.debug("SQL EXCEPTIONS");
key = "";
return key;
}catch(SQLException e){
if(e.getErrorCode() == 1111){
logger.debug("부적절한 열 입력 (null)");
}
}finally{
if(CommonUtil.isEmpty(params.get("key"))){
key = "";
} else{
key= params.get("key").toString();
}
logger.debug("TEST");
logger.debug(key);
return key;
}
예외가 일어날 곳에 try
catch 문 안에는 일어날 예외를 잡아둡니다.
finally 문에는 예외가 일어나는지 여부와는 상관없이 무조건 실행되는 로직입니다.
2. 예외처리 회피
예외처리를 해당 클래스에서 해결하지 않고 다른곳으로 위임 하는 경우입니다.
mybatis 등을 사용할 때 mapper 부분과 service 에는 예외처리를 잘 하지 않습니다.
보통 service 상속 클래스에서 처리합니다.
@Override
public int boardInsert(Map<String, String> params) throws SQLException, PersistenceException {
return BoardMapper.boardInsert(params);
}
throws 를 통해 service에서 serviceImpl로 예외를 넘기는 모습입니다.
3. 예외 전환
try catch 문으로 예외를 잡았다면 catch 문 안에는 적절한 예외처리를 해줘야 합니다.
보통 2가지로 나뉩니다.
첫번째로는 알기쉬운 예외로 만들어서 반환하는 방법입니다.
catch(SQLException e){
if(e.getErrorCode() == MysqlErrorNumbers.ER_DUP_ENTRY){
DuplicateUserIdException();
}else{
throw e;
}
}
예외코드를 가져오는 메소드를 활용해서 비교하는 방법이 있습니다.
두번째 로는 checkedException을 RuntimeException으로 포장해서 전달하는 방법입니다.
CheckException의 경우 컴파일오류가 발생하기 때문에 이를 런타임으로 포장합니다.
catch(SQLException e){
if(e.getErrorCode() == 1111){
throw new PersistenceException(pe);
}
SQLException 은 CheckedException 입니다 이를 RuntimeException을 상속한 PersistenceException으로 바꿔준 예시입니다.
마무리
예외처리를 잘 해두면 유지보수가 용이하고, 오류 발생시 빠른 수정이 가능합니다.
다음에는 예외처리를 좀더 깊숙하게 알아보겠습니다.
감사합니다.
'[Spring]_' 카테고리의 다른 글
[Spring]_Maven 의 Profiles 기능 구현,사용하기_(pom.xml) (0) | 2022.06.22 |
---|---|
[Spring]_HTTP 통신 개념,설명 (0) | 2022.06.21 |
[Spring]_Scheduler 설정 및 사용 (0) | 2022.06.17 |
[Dispatcher-Servlet]_디스패처 서블릿 이란 (0) | 2022.06.17 |
[Spring]_Controller 파라미터 정리 (0) | 2022.06.03 |