728x90
예외 처리
프로그래밍에서 발생할 수 있는 예외 상황 또는 오류를 감지하고, 이를 적절하게 처리하는 과정
예상 밖의 상황이 발생할 때 상황을 처리하지 않으면 프로그램이 비정상적으로 종료되는 것을 방지하기 위해 사용
사용 시기
예외 처리 코드가 많은 경우, 특히 예외 처리 코드가 비즈니스 로직과 섞여 있는 경우에 유용함
주로 예외 처리 코드가 반복적으로 사용되는 경우, 중복을 줄이기 위해 사용됨
장점
- 예외 처리 코드를 메인 코드에서 분리하여 가독성을 향상시킴
- 코드의 중복을 줄여 유지보수를 용이하게 함
- 비즈니스 로직과 예외 처리 로직을 분리함으로써 코드의 일관성을 유지
실습
MVC 패턴의 Model 파트 selectOne() 메소드의 queryForObject 예외처리 미루기
BoardDAO.java
@Repository
public class BoardDAO {
@Autowired
private JdbcTemplate jdbcTemplate;
private final String SELECTONE="SELECT BID, MID, CONTENT FROM BOARD WHERE BID=?";
public BoardDTO selectOne(BoardDTO bDTO) throws Exception {
Object[] args= { bDTO.getBid() };
return jdbcTemplate.queryForObject(SELECTONE, args, new BeanPropertyRowMapper<BoardDTO>(BoardDTO.class));
}
}
queryForObject() 메소드는 하나의 SQL 쿼리를 실행하고, 하나의 결과를 반환해야 하는데 결과가 반환되지 않을 경우에 에러가 발생할 수 있기 때문에 예외처리를 해줘야 함
DAO 파일에서 try-catch 방식으로 에러를 처리하는 방법과 위의 코드와 같이 thorw Exception을 통해 예외 처리하는 방법이 있는데 이번 포스팅에서는 후자의 방식으로 작성해보려고 함
따라서, 먼저 위의 selectOne() 메소드와 같이 코드를 작성한 후 throw Exception을 통해 예외를 던질 수 있다 (Controller로 던지는 것임)
CTRL.java
@Controller
public class CTRL {
@Autowired
private BoardDAO bDAO;
// ...(생략)
@GetMapping("/board/{bid}")
public String board(BoardDTO bDTO, Model model) {
try {
model.addAttribute("board", bDAO.selectOne(bDTO));
}
catch (Exception e) {
return "error";
}
return "board";
}
selectOne() 메소드에서 예외를 던져버렸기 때문에 Controller에서 try-catch를 통해 예외 처리를 해야함
또한, 예외 발생 시 error 페이지를 생성하여 해당 페이지로 이동 시킬 수 있음
예외 발생 시 이동할 페이지는 ViewResolver가 동작하는 것이기 때문에 (WEB-INF/views) 안에 jsp 파일을 생성해야 하고
return 값으로 이동할 페이지를 보내면 됨
(error.jsp 경로 : WEB-INF/views/error.jsp)
728x90
'Spring Boot' 카테고리의 다른 글
| [Spring Boot] 서비스 레이어 (0) | 2023.09.21 |
|---|---|
| [Spring Boot] GetMapping, PostMapping 어노테이션 (2) | 2023.09.20 |
| [Spring Boot] DB 연결 방법 (0) | 2023.09.18 |
| [Spring Boot] 데이터 유효성 검사 (2) | 2023.09.15 |
| [Spring Boot] 참조 변수 (1) | 2023.09.14 |