3. 웹 개발 심화
3.1. 예외 처리
스프링 부트에서는 예외 처리를 위해 @ExceptionHandler, @ControllerAdvice 및 @ResponseStatus 어노테이션을 사용할 수 있습니다. 이를 사용하면 애플리케이션 전체에서 발생하는 예외를 쉽게 처리할 수 있습니다. @ExceptionHandler는 특정 예외 클래스에 대해 예외 처리 로직을 작성할 수 있도록 해주며, @ControllerAdvice는 컨트롤러 전체에 걸쳐 예외 처리 로직을 적용할 수 있도록 해줍니다. @ResponseStatus는 예외 발생 시 반환할 HTTP 상태 코드를 지정할 수 있습니다.
예제 코드
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(value = {CustomException.class})
@ResponseStatus(HttpStatus.BAD_REQUEST)
public ResponseEntity<Object> handleCustomException(CustomException ex) {
Map<String, Object> errorBody = new HashMap<>();
errorBody.put("message", ex.getMessage());
errorBody.put("timestamp", LocalDateTime.now());
return new ResponseEntity<>(errorBody, HttpStatus.BAD_REQUEST);
}
}
3.2. 템플릿 엔진 사용
스프링 부트에서는 다양한 템플릿 엔진을 사용할 수 있습니다. 예를 들어, Thymeleaf, Freemarker, Mustache 등의 템플릿 엔진을 사용할 수 있습니다. 템플릿 엔진을 사용하면 동적인 웹 페이지를 쉽게 생성할 수 있습니다. 템플릿 엔진들은 HTML 문서 내에 특별한 문법을 사용하여 동적인 데이터를 표시할 수 있습니다. 이를 통해 서버에서 전달받은 데이터를 사용자에게 표시할 수 있습니다.
예제 코드 (Thymeleaf)
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Template Engine Example</title>
</head>
<body>
<h1 th:text="${message}"></h1>
<ul>
<li th:each="item : ${list}">
<span th:text="${item.name}"></span>
</li>
</ul>
</body>
</html>
3.3. 웹소켓 사용
스프링 부트에서는 웹소켓을 사용해 실시간 양방향 통신을 구현할 수 있습니다. 스프링 부트의 웹소켓 지원으로 @EnableWebSocket, @ServerEndpoint, @SendTo 등의 어노테이션을 사용하여 웹소켓을 쉽게 구현할 수 있습니다. 웹소켓은 클라이언트와 서버 간의 지속적인 연결을 가능하게 하여, 서로 실시간으로 데이터를 주고받을 수 있습니다. 이를 통해 채팅 애플리케이션, 실시간 알림 시스템 등의 기능을 구현할 수 있습니다.
예제 코드 (웹소켓 설정)
@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
@Autowired
private CustomWebSocketHandler customWebSocketHandler;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(customWebSocketHandler, "/websocket-endpoint")
.setAllowedOrigins("*");
}
}
예제 코드 (웹소켓 핸들러)
@Component
public class CustomWebSocketHandler extends TextWebSocketHandler {
private final Map<String, WebSocketSession> sessions = new ConcurrentHashMap<>();
@Override
public void afterConnectionEstablished(WebSocketSession session) {
sessions.put(session.getId(), session);
}
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
for (WebSocketSession s : sessions.values()) {
s.sendMessage(message);
}
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
sessions.remove(session.getId());
}
}
2023.05.05 - [프로그래밍/스프링부트(Spring Boot) 기초부터 ~] - [스프링 부트(SpringBoot) : 중급] 데이터베이스 연동 심화
'GD's IT Lectures : 기초부터 시리즈 > 스프링부트(Spring Boot) 기초부터 ~' 카테고리의 다른 글
[스프링 부트(SpringBoot) : 중급] 스프링 시큐리티를 활용한 보안 강화 (0) | 2023.05.05 |
---|---|
[스프링 부트(SpringBoot) : 중급] RESTful API 개발 심화 (0) | 2023.05.05 |
[스프링 부트(SpringBoot) : 중급] 데이터베이스 연동 심화 (0) | 2023.05.05 |
[스프링 부트(SpringBoot) : 중급] 스프링 부트 고급 구성 (0) | 2023.05.05 |
[스프링 부트(SpringBoot)] 초급 실전 예제 (0) | 2023.05.04 |
댓글