Spring Framework/Spring 입문 - 개념 및 핵심: 33개의 글
트랜잭션의 전파 설정이란 Spring에서 사용하는 어노테이션 '@Transactional'은 해당 메서드를 하나의 트랜잭션 안에서 진행할 수 있도록 만들어주는 역할을 합니다. 이때 트랜잭션 내부에서 트랜잭션을 또 호출한다면 스프링에서는 어떻게 처리하고 있을까요? 새로운 트랜잭션이 생성될 수도 있고, 이미 트랜잭션이 있다면 부모 트랜잭션에 합류할 수도 있을 것입니다. 진행되고 있는 트랜잭션에서 다른 트랜잭션이 호출될 때 어떻게 처리할지 정하는 것을 '트랜잭션의 전파 설정'이라고 부릅니다. 전파 설정 옵션 트랜잭션의 전파 설정은 '@Transactional'의 옵션 'propagation'을 통해 설정할 수 있습니다. 각 옵션은 아래와 같습니다. REQUIRED (기본값) 부모 트랜잭션이 존재한다면 부모 트..
Controller에 요청이 들어오기전에 무엇인가를 수행한다는 기능만 보면 interceptor와 filter는 무척 비슷해 보인다. (전, 후처리기 역할을 수행한다.) 위의 사진을 보면 차이점을 쉽게 알 수 있는데, 둘다 컨트롤러 전에 작업을 처리하는 용도로 사용되지만 호출되는 시점이 다르다. 필터(Filter)는 dispatcherServlet으로 요청이 가기전에 실행되고 인터셉터(Interceptor)는 Controller로 요청이 가기전에 실행이된다. Filter DispatcherServlet 앞단에서 정보 처리 J2EE 표준스펙에 정의되어 있는 기능 Interceptor DispatcherServlet에서 Handler(Controller)로 가기전에 정보 처리 SpringFramework에서..
Spring framework Annotation 개념 XML : 분리 - 결합도를 낮추고 유지보수성을 높이기 위해 xml로 설정하였으나 xml이 너무 많아지면 오히려 유지보수성이 낮아지는 아이러니한 상황 발생 - 유지보수성에 방점 - 시스템 전체에 영향을 주고 이후에 변경 가능성이 있는 것은 xml로 설정. https://medium.com/@2xel/spring-framework-annotation-%EA%B0%9C%EB%85%90-c26c15716538 @Component 태그를 추가하면 어노테이션이 적용된 클래스를 빈으로 등록하게된다. 태그는 어노테이션과 관련해서 BeanPostProcessor를 함께 등록한다. @Required(RequiredAnnotationPostProcessor) @Aut..
Spring Annotation인 @Component와 @Bean의 차이에 대해 알아보자. 차이점 @Bean public ObjectMapper objectMapper(){ return new ObjectMapper(); } @Component public class CustomMapper{ ... } @Bean의 경우 개발자가 컨트롤이 불가능한 외부 라이브러리들을 Bean으로 등록하고 싶은 경우에 사용된다. 예를 들면 ObjectMapper의 경우 ObjectMapper Class에 @Component를 선언할 수 없으니 ObjectMapper의 인스턴스를 생성하는 메소드를 만들고 해당 메소드에 @Bean을 선언하여 Bean으로 등록한다. 반면 개발자가 직접 컨트롤이 가능한 Class들의 경우엔 @Co..
| 스프링 AOP ( Aspect Oriented Programming ) AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다. 예로들어 핵심적인 관점은 결국 우리가 적용하고자 하는 핵심 비즈니스 로직이 된다. 또한 부가적인 관점은 핵심 로직을 실행하기 위해서 행해지는 데이터베이스 연결, 로깅, 파일 입출력 등을 예로 들 수 있다. AOP에서 각 관점을 기준으로 로직을 모듈화한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미다. ..
| 스프링 Expression Language : SpEL SpEL은 Spring Expression Language의 줄임말로 스프링의 객체들의 정보를 질의하거나 조작하여 어떤 값을 표현할 수 있는 강력한 표현 언어다. 객체들의 정보는 레퍼런스로 연관되어 있는 객체 그래프를 탐색하여 얻어지므로 런타임 때 SpEL의 표현식 값이 결정(Resolve)된다. 참고로 객체 그래프는 런타임 때 객체 간의 연관 관계를 통해 그려지는 그래프를 의미하는 말이다. | SpEL의 내부 구성 SpEL은 내부적으로 ExpressionParser 객체를 통해 SpEL의 표현식을 파싱하며 StandardEvaluationContext 객체를 통해 스프링 빈이 가지고 있는 객체 정보를 구한다. 이 두 정보를 가지고 표현식 객체와..
| Converter와 Formatter PropertyEditor는 스프링 초창기에 썼던 데이터 바인딩 인터페이스였지만 후에 이를 대체할 Converter와 Formatter란 데이터 바인딩 인터페이스가 나오게 되었다. Converter는 S타입을 T 타입으로 변환할 수 있는 일반적인 변환기이며 Thread-safe하다. Formatter는 Object와 String간의 변환을 담당하며 문자열을 Locale에 따라 다국화하는 기능을 제공한다. 웹 어플리케이션을 제작할 때는 주로 Formatter를 사용한다. | Converter 구현 Converter는 제네릭으로 두 개의 인자, Source와 Target을 받아서 구현한다. 또한 Converter는 PropertyEditor와는 다르게 Thread-s..
| 스프링 데이터 바인딩( Spring Data Binding ) 스프링에서는 사용자가 입력한 값을 타겟 객체에 설정하는 데이터 바인딩 기능을 지원한다. org.springframework.validation.DataBinder 인터페이스를 통해서 데이터 바인딩 기능을 지원하며 사용자가 입력한 값을 도메인 모델에 동적으로 변환해서 넣어준다. 이 기능이 필요한 이유는 다음과 같은 이유에서다. 사용자의 입력값은 대부분 문자열이지만 자바의 객체가 가지고 있는 데이터 타입은 int, long, Data, Double 혹은 사용자가 작성한 클래스로 만들어진 객체 Event, Book 같은 것이다. 따라서 사용자의 이런 문자열 입력값을 자바의 데이터 타입으로 변환해서 넣어줘야하는 데, 이때 적절하게 데이터를 넣어주..
| 스프링 Validation 추상화 스프링에서는 Validator 인터페이스를 지원하여 어플리케이션에서 사용하는 객체를 검증할 수 있는 기능을 제공한다. 이 Validator 인터페이스는 어떤 특정 계층에 사용하는 기능이 아닌 모든 계층에서 사용할 수 있다. Validator는 Java EE Spec인 Bean Validation의 어노테이션을 이용하여 객체가 제대로 요구사항에 맞추어 생성 됬는지 검증할 수 있다. | Validator 인터페이스 Validator 인터페이스를 상속한 클래스는 두 메서드를 구현해야 한다. boolean supports(Class clazz) : 어떤 타입의 객체를 검증할 때 이 객체의 클래스가 이 Validator가 검증할 수 있는 클래스인 지를 판단하는 매서드 void..
| 스프링 Resource 추상화 스프링의 Resource 객체는 java.net.URL을 추상화한 인터페이스다. Resource 객체는 스프링 내부에서 가장 많이 사용하는 인터페이스이며 스프링 IoC 컨테이너가 생성될 때, 컨테이너 설정 정보를 담는 파일들을 가져올 때도 사용된다. 리소스를 읽어오는 기능을 Resource 인터페이스를 통해 추상화한 이유는 다음과 같다. 1. 클래스 패스 기준으로 리소스 읽어오는 기능 부재 2. ServletContext를 기준으로 상대 경로로 읽어오는 기능 부재 3. 새로운 핸들러를 만들어 사용할 수 있지만 기능이 복잡하고 편리하지 않다. | Resource 인터페이스 구현체 Resource 인터페이스를 구현한 구현체들의 목록은 다음과 같다. 1. UrlResource..