본문 바로가기
[기록] 220112 1. Weaving 분리한 관점을 여러 차례 모듈에 삽입하는 것을 AOP에서는 위빙(Weaving: 엮기)이라고 부른다. 즉 공통 코드(Advice)를 핵심 로직 코드에 삽입하는 것이 Weaving이다. Aspect를 target에 제공하여 새로운 프록시 객체를 생성하는 과정을 말한다. Compile-time Weaving, Load-time weaving, Run-time weaving 세가지 방식의 Weaving이 존재하고, Spring AOP에서는 CGLIB Proxy, JDK Dynamic Proxy를 이용한 Run-time Weaving 방식을 제공한다. Spring AOP는 사용자의 특정 호출 시점에 IoC 컨테이너에 의해 AOP를 할 수 있는 Proxy Bean을 생성해준다. 동적으로 생성된.. 2022. 1. 16.
[기록] 220105 1. 인프라 로직 비즈니스 로직 외의 트랜잭션을 걸고 권한을 체크하는 등의 부가기능을 말한다. 애플리케이션 전 영역에 나타날 수 있다 → 중복 코드 비즈니스 로직과 함께 있으면 비즈니스 로직을 이해하기 어려워진다. 횡단 관심사 인프라 로직은 로깅, 트랜잭션, 권한검사, 성능측정 등 하나의 관심사를 갖게 된다. 비즈니스 로직을 수행할 때 인프라 로직의 중복이 횡단으로 나타나기 때문에 이를 cross-cutting concern, 횡단 관심사라고 부른다. 부가기능이라는 것은 횡단의 관심을 가지기 때문에 필수적으로 어떤 부가기능을 어디에 적용해야 하는가라는 질문을 만나게 된다. aspectJ에서는 메소드가 호출될 때, 실행될 때 필드에 접근할때, 객체가 생성될때 등 다양하게 join point를 구현해놨지만,.. 2022. 1. 9.
[6장] AOP AOP는 IOC/DI, 서비스 추상화와 더불어 스프링의 3대 기반기술의 하나다. 서비스 추상화를 통해 많은 근본적인 문제를 해결했던 트랜잭션 경계설정 기능을 AOP를 이용해 더욱 세련되고 깔끔한 방식으로 바꿔보자. 그리고 그 과정에서 스프링이 AOP를 도입해야 헸던 이유도 알아보자. 트랜잭션 코드의 분리 -메소드 분리 트랜잭션 경계설정의 코드와 비즈니스 로직 코드 간에 서로 주고받는 정보가 없고, 비즈니스 로직 코드를 사이에 두고 트랜잭션 시작과 종료를 담당하는 코드가 앞뒤에 위치하고 있어 메소드로 분리하였다. public void upgradeLevels() throws Exception { TransactionStatus status = this.transactionManager.getTransact.. 2022. 1. 3.
[기록] 211229 1. 트랜잭션 더 이상 나눌 수 없는 일련의 단위 작업을 뜻한다. 대표적인 예로 계좌이체를 많이 말한다. 계좌이체를 예를 보면 다음과 같은 순서로 작업이 일어난다. 계좌이체하고자 하는 금액 입력 계좌에 뽑고자하는 금액보다 많은 금액이 들어있는지 확인 들어있다면 출금 송금한 계좌에 입금된 만큼 + 2. ACID ACID는 트랜젝션의 특징들의 앞글자를 딴 단어이다. Atomicity(원자성) 트랜잭션을 구성하는 1~4번이 모두 수행되거나 모두 수행되지 않아야 하는 특성을 말한다. 이는 DB에 대해서 알아야 하는데 DB에서 자동으로 이전에 commit 된 상태를 임시 영역인 rollback segment 에 저장을 해놓고 장애가 발생할 떄 rollback segment 에 저장해놓았던 상태로 rollback을.. 2022. 1. 2.
[5장] 서비스 추상화 5장에서는 DAO에 트랜잭션을 적용해보면서 스프링이 어떻게 성격이 비슷한 여러 종류의 기술을 추상화하고 이를 일관된 방법으로 사용할 수 있도록 지원하는지 살펴보자. 1. 사용자 레벨 관리 기능 추가 지금까지의 UserDao는 가장 기초적인 CRUD 작업만 가능하다. 사용자 정보를 DB에 넣고 빼는 것을 제외하면 어떤 비즈니스 로직도 갖고 있지 않다. 서비스 추상화에 관한 내용을 보기 전에 사용자 레벨 관리 기능을 추가하자. 여기에 다음과 같은 비즈니스 로직을 구현해보자. 사용자의 레벨은 BASIC, SILVER, GOLD 세 가지 중 하나다. 사용자가 처음 가입하면 BASIC 레벨이 되며, 이후 활동에 따라서 한 단계씩 업그레이드될 수 있다. 가입 후 50회 이상 로그인을 하면 BASIC에서 SILVER.. 2021. 12. 29.
[5장] 서비스 추상화 5장에서는 지금까지 만든 DAO에 트랜잭션을 적용해보면서 스프링이 어떻게 성격이 비슷한 여러 종류의 기술을 추상화하고 이를 일관된 방법으로 사용할 수 있도록 지원하는지를 살펴보자. 추상화란 하위 시스템의 공통점을 뽑아내서 분리시키는 것을 말한다. 그렇게 하면 하위 시스템이 어떤 것인지 알지 못해도, 또는 하위 시스템이 바뀌더라도 일관된 방법으로 접근할 수가 있다. 사용자 레벨 관리 기능 추가 UserDao는 User 오브젝트에 담겨 있는 사용자 정보를 등록, 조회, 수정, 삭제하는 일명 CRUD 기능만 가능하다. 여기에 간단한 비즈니스 로직을 적용하여 보자. 사용자의 로그인 횟수등에 따라 레벨(BASIC, SILVER, GOLD)을 부여하여 관리할 수 있도록 한다. JAVA5 이상에서 사용 가능한 enu.. 2021. 12. 26.