Spring AOP Aspect-Oriented Programming는 OOP를 보완하는 수단이다. 로깅, 트랜잭션 등 서비스 로직 내에서 동일하게 사용되는 특별한 관심사(Aspect)를 모듈화하는 기법이다. 개요 트랜잭션을 활성화한 로직은 아래와 같은 공통 사항을 포함할 수 있다. 트랜잭션 활성화 서비스 로직 수행 Commit / Rollback 트랜잭션 종료 AOP가 없다면 트랜잭션이 필요한 로직을 아래처럼 수행할 수 있다. void doLogic() { transactionManager.enable(); boolean result = service.execute1(); if (result) { transactionManager.commit(); } else { transactionManager.ro..

전체 글
https://github.com/dhmin5693 dhmin5693@naver.comSpEL (Spring Expression Language 런타임 시간에 작동하는 강력한 표현 언어로, Spring 하위 프로젝트에서 주로 사용된다. 구성 ExpressionParser parser = new SpelExpressionParser(); Expression exp = parser.parseExpression("5 * 5"); int expVal = exp.getValue(Integer.class); System.out.println(expVal); 주요 문법 ${"property_name"} $ 로 시작하며, property 값을 읽어올 수 있다. #{"expression"} # 로 시작하며, 1+1(덧셈), 1 eq 1(참/거짓 판별) 등 표현식을 사용하여 나타낼 수 있다. express..
http://www.gurubee.net/lecture/1300 계층구조 쿼리(Hierarchical Queries)란? 계층구조 쿼리란? 오라클 데이터베이스 scott 유저의 emp 테이블을 보면 empno와 mgr컬럼이 있으며, mgr 컬럼 데이터는 해당 사원의 관리자의 empno.. www.gurubee.net https://goddaehee.tistory.com/60 [Oracle] 계층구조 쿼리(Hierarchical Queries), (계층형 쿼리) 계층구조 쿼리(Hierarchical Queries) Connect by 계층적 쿼리는 오라클만이 가진 기능 중 하나로, 데이터를 선택하여 계층적인 순서 그대로 리턴하는데 사용된다. (계층형 쿼리라고도 한다) 1. 문법정리 [START.. godd..
Data binding 추상화 Spring에서 말하는 데이터 바인딩은 데이터 동적 변환이다. 입력한 값을 도메인 모델에 맞춰 자동으로 변환 후 할당하는 것을 말한다. 쉬운 예시를 들어보면, 사용자가 문자열 ”2020-01-16”을 넘겼는데 날짜 타입인 Date 로 변환하고 User 클래스를 생성하여 registerDate라는 이름을 가진 필드에 넣어주는 것이다. PropertyEditor PropertyEditor 는 Spring이 데이터 바인딩을 위해 지원하는 인터페이스 중 하나이다. 이 인터페이스의 구현체는 PropertyEditorSupport 가 있다. 이 구현체를 사용할 땐 아래의 단점에 주의하는 것이 좋다. Thread unsafe한 구조이다. String, Object로만 변환이 가능하다. ..
Validation 추상화 객체를 검증할 때 사용하는 인터페이스이다. 주로 Spring mvc에서 많이 활용되나 일반적인 인터페이스이기 때문에 모든 계층에서 사용할 수 있다. JSR-303 (Bean Validation), JSR-349 (Bean Validation 1.1)을 지원한다. 현재는 2.0 이상의 버전이 출시되어 있다. 직접 구현하기 현재는 더 쉽게 구현할 수 있는 방법이 있어 잘 쓰이지 않는 방법이다. 하지만 비즈니스 로직이 복잡하다면 직접 구현하는 것도 고려해볼 수 있다. Spring boot 프로젝트를 하나 만들고 검증할 객체와 Validator를 생성한다. 마지막으로 실행 결과를 볼 AppRunner 클래스까지 정의한다. User 검증 대상인 POJO public class User ..
Resource 추상화 Spring framework는 대부분의 기능이 추상화되어 있어 필요한 기능이 있으면 적절한 구현체를 선택하여 사용할 수 있다. Resource 또한 추상화되어 있어 사용자가 필요한 기능을 선택하여 구현할 수 있게 되어 있다. Resource 주요 메소드 exists() resource가 반드시 존재하리라는 보장이 없다. 존재 여부를 검사한다. getFile() resource의 file handle을 받아온다. getURI() resource의 URI handle을 받아온다. getURL() resource의 URL handle을 받아온다. 더 많은 정보는 Resource (Spring Framework 5.2.3.RELEASE API)를 참고하자. Resource 주요 구현체 ..
IoC Container - ResourceLoader Application에 포함한 리소스를 불러오는 기능을 제공하는 인터페이스이다. 기본적으로 ResourceLoader를 주입받아 사용할 수 있으나, ApplicationContext로도 같은 기능을 사용할 수 있다. ApplicationContext가 ResourceLoader를 상속받아 구현했기 때문이다. ResourceLoader AppRunner를 작성하여 활용법을 알아본다. Spring boot 프로젝트를 생성하고 아래의 소스코드를 작성한다. AppRunner @Component public class AppRunner implements ApplicationRunner { @Autowired ResourceLoader resourceLoad..
IoC Container - ApplicationEventPublisher 옵저버 패턴의 구현체로, 이벤트 기반 프로그래밍에 유용한 인터페이스를 제공한다. Observer pattern 옵저버 패턴엔 행위자, 관찰자가 존재한다. 행위자의 어떤 행동으로 변경 사항이 발생하면 즉시 관찰자에게 알려주는 것이 요점이다. 가장 대표적인 응용 사례는 데이터 바인딩이라고 할 수 있다. 웹 프론트엔드 개발에 가장 많이 사용되는 프레임워크 중 Angular, React 등은 데이터 바인딩을 지원하고 있다. View가 어떤 데이터를 바라보고 있고, 그 데이터가 변하는 즉시 View도 그 변화를 반영한다. 물론 View가 바뀐 데이터를 반영하는 과정엔 프로그래머의 개입이 필요하지 않다. Event Publisher / Su..