💡 트랜잭션이란 > 트랜잭션(Transaction): 더 이상 나눌 수 없는 업무 처리의 최소 단위 트랜잭션은 데이터베이스에 여러 개의 클라이언트가 동시에 액세스하거나 갱신을 처리하는 과정에서 중단 등으로 인한 데이터 부정합을 방지하기 위해 사용하는 것이다. 트랜잭션 시작 후 정상 처리 된 경우 commit()을 통해 데이터베이스에 변경 사항을 영구적으로 적용하고, 오류가 발생한 경우 rollback()을 수행하여 트랜잭션 내에서 작업했던 모든 내용을 취소하고 원래 상태로 롤백한다. 트랜잭션은 아래와 같은 성질을 갖는다. 원자성 : 트랜잭션 연산이 모두 반영되거나 모두 반영되지 않아야 함 일관성 : 트랜잭션이 완료되면 항상 일관성있는 상태를 유지해야 함 독립성 : 이미 수행 중인 트랜잭션이 완료되기 전에 다른 트랜잭션의 수행 결과를 참조할 수 없음 영속성 : 완료된 트랜잭션은 영구적으로 반영되어야 함
💡 PSA 개요 스프링 삼각형의 마지막 요소인 PSA(Portable Service Abstractions)는 일관성 있는 서비스 추상화를 뜻한다. 여기서 추상화란 하위 시스템의 공통점을 뽑아내서 분리시키는 것을 말한다. 이를 통해 하위 시스템을 알지 못하거나 변경이 있더라도 일관된 방식으로 접근할 수 있게 한다. 뿐만 아니라 서비스 추상화를 함으로써 '단일 책임 원칙'을 준수하며 코드가 간결해지고 작업 목적이 분명하게 드러나 객체 지향적인 코드를 작성할 수 있다. 💡 Spring에서의 PSA 스프링 프레임워크에서는 트랜잭션과 같이 기능은 유사하지만 사용 방법이 다른, 로우 레벨의 다양한 기술에 대해서 추상 인터페이스와 일관성 있는 접근 방법을 제공해주는 것을 말한다. 대표적으로 스프링의 트랜잭션 추상화를 통해 스프링에서 어떻게 서비스를 추상화 하는 지 알 수 있다. 트랜잭션 서비스 추상화의 필요성 먼저 DB의 트랜잭션이 아닌 비즈니스 로
💡 Spring AOP 기능 및 목적 Spring AOP는 앞서 설명한 것과 같이 Aspect를 모듈화하여 객체 지향 프로그래밍을 보완하는 역할이다. 순수 자바로 구현되어 특별한 컴파일 과정이 필요하지 않고, Spring IoC 컨테이너에 의존한다. AOP 주입을 메서드 전후로만 지원하고, Spring Framework 에서 선언적 트랜잭션 관리에 중점적으로 사용된다. Spring은 Spring AOP의 목표는 완벽한 AOP의 구현보다 Spring IoC와 매끄럽게 통합하여 문제를 해결하는데 도움이 되는 것이라고 한다. 따라서 세분화된 객체(도메인 객체)에 AOP를 적용하고 싶다면, AspectJ를 활용하라고 제안하고 있다. 즉, Spring은 AspectJ와 Spring AOP의 모든 기능을 활용하여 Spring 기반 애플리케이션에서 모든 AOP 기능을 사용할 수 있도록 지원하고 있다. 💡 Proxy 패턴을 이용한 Spring AOP 구현 방법 ![http
💡 OOP 모듈화의 한계 객체지향 프로그래밍은 어플리케이션 설계 시, 응집도를 높이고 결합도를 낮추기 위해 책임과 관심사에 따라 각 클래스가 단일 책임을 갖도록 분리한다. 이때 로깅이나 트랜잭션 등 각 모듈에서 공통으로 사용되는 부가 기능들을 횡단 관심사(cross-cutting concern)라고 한다. 예로 아래와 같이 DB 연동 프로그램을 작성하게 되면 아래와 같은 형태의 코드가 반복되는 것을 볼 수 있다. 즉, 코드 = 핵심 관심사 + 횡단 관심사 이며, 핵심 관심사는 모듈마다 다르지만 횡단 관심사는 각 클래스에 중복하여 작성되어 어플리케이션 전반에 걸쳐 흩어져 존재하게 된다. 프록시 클래스를 생성하고 데코레이터 패턴을 통해 핵심 비즈니스 로직과 부가 기능 관심사를 분리할 수도 있지만, 이 역시 부가 기능 관심사를 사용하는 클래스마다 부가 기능 관심사가 구현된 클래스를 생성하고 인터페이스 메서드를 일일이 구현해야하는 등 한계점이 있다. 이처럼 전통적인 OOP
Spring의 기반, 스프링 삼각형 시리즈 첫 번째 게시글인 "Spring의 등장"편에서 Spring의 핵심은 POJO 프로그래밍이라고 설명하며 이를 위해 Spring에서 제공하고 있는 주요기술 3가지를 스프링 삼각형을 통해 가볍게 소개했다. 이번 포스팅부터 스프링 프레임워크를 이해하기 위해 3대 프로그래밍 모델, IoC/DI, AOP, PSA에 대해 차례로 다룰 예정이다. 💡 프로그래밍에서 의존성이란? 의존성(Dependency)란 두 모듈간의 연결, 객체지향언어에서는 두 클래스 간의 관계라고도 한다. 의존관계는 항상 방향성이 있어 두 객체간 의존관계가 있을 때, A ---> B 와 같이 점선 화살표로 표현하며 'A가 B에 의존한다.' 라고 말한다. 더 깊이 나누면 의존하는 객체(전체)와 의존되는 객체(부분) 사이의 집합 관계(A
Srping 프레임워크는 20여개의 모듈로 구성되어 있다. 해당 모듈들은 위의 'Overview of Spring Framework' 다이어그램에서 보는 것과 같이 Data Access/Integration, Web, AOP, Core Container, Instrumentation, Test로 그룹화된다. 💡 Core Container Core Container는 Core, Beans, Context, spEL로 구성되어 있다. Core Spring 프레임워크의 기본 부분을 제공하며, Spring의 모든 기능들은 Core 모듈의 인터페이스와 클래스를 구현/상속받음 Beans 주로 사용하는 Bean 오브젝트와 BeanFactory를 제공하는 모듈로, IoC/DI 기능을 제공 Context Core와 Beans 모듈의 기능을 기반으로 애플리케이션 내 정의 및 구성된 모든 개체에 접근하고 제어하는 작업을 담당, BeanF
스프링은 자바를 통해 엔터프라이즈 시스템을 개발하는 데 좀 더 나은 방법과 전략을 찾으려고 고민하고 연구한 많은 개발자의 수고가 오랜 시간에 걸쳐서 집약된 결정체이다. >- 토비의 스프링 3.1 💡 Spring의 등장 스프링은 자바 엔터프라이즈 애플리케이션 개발에 사용되는 경량 애플리케이션 프레임워크이다. 프레임워크는 애플리케이션 개발을 빠르고 효율적으로 할 수 있도록 틀과 공통 프로그래밍 모델, 기술 API 등을 제공해준다. 복잡한 EJB를 탈피하기 위한 Java 진형의 반발 스프링 프레임워크가 등장하기 이전, 자바 엔터프라이즈 애플리케이션 개발을 위해 Sun Microsystems에서는 JSP, Servlet, EJB, JDBC 등이 포함되어 있는 J2EE(Java to Enterprise Edition)을 만들었다. 이중 서버측 컴포넌트 모델로 EJB(Enterprise Java Beans)를 사용했다. EJB의 탄생은 '비즈니스 객체들