Spring

핵심 기능과 부가 기능 애플리케이션 로직은 크게 핵심 기능과 부가 기능으로 나눌 수 있다. 핵심 기능이라 함은 객체가 가지고 있는 비즈니스로직으로 볼 수 있다. 만약 계산을 해주는 Calculator 라는 객체가 있다고 가정하면, Calcualtor의 핵심 기능은 사칙연산 등을 의미한다. 부가 기능은 핵심 기능을 보조하기 위한 기능이다. 단독으로 사용되지 않으며 핵심기능과 함께 사용된다. 예를 들면 메소드 실행 속도를 나타내는 로그, 트랜잭션 기능, 보안 기능 등등이 된다. 핵심 기능에 부가 기능을 추가해보자 @Slf4j public class Calcualtor { public int add(int x, int y) { // 핵심 기능 return x + y; } public int sub(int x,..
2022.09.27 - [프로그래밍 노트/SPRING] - [Spring] 동적 프록시 기술(feat. 리플렉션) 바로 직전 포스팅에서 동적 프록시 기술에 대해 알아보았는데, 이런 의문점을 가질 수 있다. 인터페이스가 있는 클래스는 Jdk Dynmic Proxy를 사용하고, 존재하지 않는 경우에는 CGLib 를 사용해야하니 InvocationHandler 와 MethodInterceptor 를 모두 구현해놔야하는 것인가? 물론.. 그래도 되지만 스프링에서는 프록시 생성을 추상화하여 프록시 팩토리(ProxyFactory)라는 것을 제공해준다. 우리는 타겟 객체가 인터페이스를 구현했는지 안했는지 알필요가 없다. 프록시 팩토리에서 인터페이스가 있으면 자동으로 Jdk Dynamic Proxy를 사용하고, 구체 ..
트랜잭션은 가장 작은 작업의 단위로, 우리는 여러개의 SQL이 사용되는 작업을 하나의 트랜잭션으로 취급해야하는 경우가 존재한다. 대표적인 예가 우리가 모두 알고 있는 계좌이체 같은 경우이다. 스프링에서 트랜잭션을 위해 여러가지 기술들을 제공하고 있는데 관련해서 알아보자. 트랜잭션 경계설정 JDBC를 이용하게되면 아래와 같이 트랜잭션 경계를 설정하여 2개의 작업을 한 트랜잭션으로 묶을 수 있게 된다. Connection c = dataSource.getConnection(); c.setAutoCommit(false); // 트랜잭션 시작 (자동 커밋 옵션 false) try { // 하나의 트랜잭션으로 묶인 단위 작업 ProparedStatement st1 = c.prepareStatement("출금계좌에..
2022.03.23 - [데이터베이스 노트/데이터베이스] - Database의 레플리케이션(Replication) (Master/Slave DB) 앞에서 Master/Slave DB 환경을 구축하였을 때의 이점을 살펴보았으니 애플리케이션단에서 구현하는 방법을 살펴보자. 개발환경 : MyBatis 일단 각 DB 별 DataSource가 필요하므로 DataSoruce를 정의해 준다. ... // Master DataSource @Bean(name = MASTER_DATASOURCE) public HikariDataSource masterDataSource() throws SQLException { return new HikariDataSource(getHikariConfig(getOracleDataSourc..
Srping Validation Spring에서는 AOP와 같은 방식으로 더 편리하게 유효성검사를 할 수 있다. Validated 스프링에서는 유효성검사에 진입하게되는 지점에 @Validated라는 애노테이션을 사용하는 방법을 제공한다. 필요한 클래스나 메소드에 @Validated 어노테이션을 추가해서 사용한다. @Service @Validated public class UserService{ public User add(@NotNull User user){ } } 만약 제약조건에 위반되면 ConstraintViolationException이 발생하게 된다. (※ @ControllerExceptionHanlder를 사용하여 요긴하게 써먹을 수 있음. ConstrainoViolationException에서..
Vlidation은 데이터를 검증할 때 사용한다. 데이터 검증으 여러 계층에 걸쳐서 이루어지게 되는데, 이 과정으로 인해 문제점이 발생할 수 있다. 코드의 중복 검증로직 불일치로 인한 오류 이 문제를 해결하기 위해서 Java에서는 2009년부터 Bean Validation이라는 데이터 유효성 검사 프레임워크를 제공하고 있다. Bean Validation은 다양한 제약을 어노테이션을 사용하여 데이터를 검증할 수 있게 하였다. Bean Validation 1.0 (JSR-303) Bean Validation 1.1 (JSR-349) Bean Validation 2.0 (JSR-380) Hibernate Validator Hibernate Validator는 Bean Validation 명세에 대한 구현체이다..
Spring ⇒ IoC와 AOP를 지원하는 경량의 컨테이너 프레임워크 개발자가 직접 Servlet 클래스를 작성하지 않고, POJO 만으로 웹 애플리케이션을 구축할 수 있다는 것이 스프링의 특징이다. 컨테이너란? 특정 객체의 생성과 관리를 담당하며 객체 운용에 필요한 다양한 기능을 제공한다. 필요한 객체를 생성하고 객체 간의 의존관계를 관리한다는 점에서 스프링도 일종의 컨테이너라고 할 수 있다. 스프링 컨테이너의 종류 스프링에서는 BeanFactory와 이를 상속한 ApplicationContext 두 가지 컨테이너를 제공한다. BeanFactory: 스프링 설정파일(xml 혹은 java)에 등록된 bean 객체를 생성하고 관리하는 가장 기본적인 컨테이너 기능만 제공한다. 컨테이너가 구동될 때 객체를 생..
애노테이션 기반의 스프링 @AOP 의존성 추가 org.springframework.boot spring-boot-starter-aop 애스팩트 정의 @Aspect 빈으로 등록해야 하니까(컴포넌트 스캔을 사용한다면) @Component도 추가. 포인트컷 정의 @Pointcut(표현식) 주요 표현식 execution @annotation bean 포인트컷 조합 &&, ||, ! @Aspect @Component public class PerfAspect { // Advice + Pointcut @Around("execution(* com.corn..*.EventService.*(..))") public Object logPerf(ProceedingJoinPoint pjp) throws Throwable { ..
스프링 AOP 특징 프록시 기반의 AOP 구현체 스프링 빈에만 AOP를 적용할 수 있다. 모든 AOP 기능을 제공하는 것이 목적이 아니라, 스프링 IoC와 연동하여 엔터프라이즈애플리케이션에서 가장 흔한 문제에 대한 해결책을 제공하는 것이 목적 프록시 패턴 왜? (기존 코드 변경 없이) 접근 제어 또는 부가 기능 추가 기존 코드를 건드리지 않고 성능을 측정해 보자. (프록시 패턴으로) EventService (Subject) public interface EventService { void createEvent(); void publishEvent(); } SimpleEventService (Real Subject) @Service public class SimpleEventService implement..
Aspect-oriented Programming(AOP)는 OOP를 보완하는 수단으로, 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법 흩어진 관심사 (Crosscutting Concerns) AOP를 적용하게 되면? 비즈니스로직이 아닌 공통적이고 반복적인 코드를 처리하기 위한 방법으로 Aspect X, Y, Z를 횡단 관심사(cross-concern)라고도 한다. Logging, Security, Transaction을 Aspect라고 보면 된다. (공통 관심사에 대한 추상적인 명칭) AOP 주요 개념 Aspect와 Target Advice Join point와 Pointcut AOP 구현체 자바 AspectJ 스프링 AOP AOP 적용 방법 컴파일 ⇒ 클래스 로드시, 부하가 생길 수 있음 ..
깡냉쓰
'Spring' 태그의 글 목록