리다이렉트 : 요청한 자원을 주는게 아니라, 새로운 자원을 돌려주는 것
정적 요청
클라이언트(웹 브라우저) 요청 웹서버
-------------------------------------------------------> abc.gif
응답 (200 OK, 404 Not Found)
abc.gif <----------------------------------------------------------
동적 요청
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>%d %5p [%c] %m%n</Pattern>
</encoder>
</appender>
Appender의 종류
- ConsoleAppender : 로그를 콘솔에 출력
- RollingFileAppender : 로그를 파일로 만들어서 출력
Pattern 요소
- %d : 로그 기록 시간
- %5p : 로깅 레벨(5자리 유지)
- %m : 로그 메시지
- %n : 개행
- %c : 로깅이 발생한 카테고리
Statement
- Statement :
- PreparedStatement : 안전한 쿼리 실행을 보장하기 위함
- CallableStatement : DB에 정의되어 있는 Stored Procedure를 호출해서 실행
인터셉터(Intercepter)
- Filter = Servlet Filter → J2EE 표준 스펙에 포함
- Dispacther Servlet : 요청 분개
- Intercepter : 스프링 프레임워크에서 제공하는 기능
- HandlerInterceptorAdapter : 스프링에서 인터셉터를 구현할 때 사용
- preHandle : 컨트롤러 실행 전에 수행
- postHandle : 컨트롤러 수행 후 결과를 뷰로 내보내기 전에 수행
- afterCompletion : 뷰 작업까지 완료된 후 수행
인터셉터를 등록 → 스프링 4.0 이상에서는 자바 기반의 설정을 지원
인터셉터의 기능을 AOP를 이용해서 로그를 남길 수 있음
AOP : 어플리케이션 전반에서 사용되는 기능을 여러 코드에 쉽게 적용할 수 있도록 하는 것
- 컨트롤러, 서비스, Mapper의 메서드가 실행될 때 각 메서드의 경로와 이름을 로그로 출력
트랜잭션 적용하기 (@Transactional)
@Bean
public PlatformTransactionManager transactionManger() throws Exception{
return new DataSourceTransactionManager(dataSource());
}
이러한 Bean이 있으면 @Transactional 적용이 가능하다.
AOP를 이용하여 트랜잭션 설정
많이 길다..
@Transactional vs AOP
- @Transactional
- 장점 : 쉽고 간단하다. 원하는 곳에만 트랜잭션을 적용.
- 단점 : 개발자의 실수로 누락될 수 있음, 외부 라이브러리에 적용이 불가능 하다
- AOP
- 장점 : 공통으로 적용되므로 누락이 발생하지 않음, 외부 라이브러리에 적용이 가능하다(pointcut으로 적용)
- 단점 : 성능에 영향을 미친다. 원하는 곳에만 적용하기 힘들다.
예외처리
- try / catch
- Controller 단에서 @ExceptionHandler 어노테이션 사용
- @ControllerAdvice를 이용한 전역 예외처리