본문 바로가기

WEB

(18)
6.5 스프링 AOP Spring AOP 주요 용어 Aspect 공통 기능을 모듈화한 기본 모듈이다. Target 부가기능을 부여할 대상이다. Join point 어드바이스가 적용될 수 있는 위치를 말한다. Advice 타겟에게 제공할 부가기능을 담은 모듈이다. Point cut 어드바이스를 적용할 조인 포인트를 선별하는 기능 Advisor 포인트컷 + 어드바이저 스프링 aop를 적용해서 테스트를 실행했다. NameMathchMethodPointcut의 getClassFilter 메서드를 구현해서 클래스 필터를 "HelloT"로 시작하는 클래스에 매칭시키고 NameMathchMethodPointcut.setMappedName("sayH")로 sayH로 시작하는 메서드에 필터를 적용했다. ProxyFactoryBean 생성 후..
토비의 스프링 6.1 트랜잭션 코드의 분리 UserService 인터페이스를 생성하고 기존의 UserService 클래스를 UserServiceImpl클래스로 변경한다. 트랜잭션이 없는 UserServiceImpl과 트랜잭션 처리가 있는 UserServiceTx클래스를 만들어준다. public interface UserService { void add(User user); void canUpgradeLevels() throws SQLException; } public class UserServiceImpl implements UserService{ UserDao userDao; public static final int MIN_LOGCOUNT_FOR_SILVER = 50; public static final int MIN_RECOMMEND_FOR..
토비의 스프링 5.2 트랜잭션 서비스 추상화 레벨을 변경하는 비즈니스 로직을 실행시킬 때 네트워크나 어떤 문제가 생겨서 중간에 예외가 터진다면 어떻게 될까? 일부 유저의 정보는 변경되고 예외가 터진후에 유저의 정보는 변경되지 않을 것이다. 이 때 두 가지 방법이 있다. 1. 이미 처리된 정보는 유지하고 유저들의 요청이나 오류를 수정해서 반영하는 방법이 있다. 2. 하나의 묶음처리(트랜잭션)로 올바르게 처리된 정보를 되돌린다.(롤백) 여기서 하나의 트랜잭션으로 묶어서 롤백하는 방법을 알아보자. 먼저 1초도 안되는 테스트 코드에서 네트워크 예외를 처리하지 말고 가짜 객체를 만들어서 id가 중복되게 만들고 예외가 터지게 만들어보자. static class TestUserService extends UserService { private String id..
토비의 스프링 5.1 서비스 추상화 기존에 있던 C,R,U,D에 추가로 등급을 판별해주는 비즈니스 로직을 추가하려고 한다. USER 클래스에 추가적인 필드를 추가해준다. level, login, recommend 추가 public class User { public User(){} public User(String id, String name, String password, Level level, int login, int recommend) { this.id = id; this.name = name; this.password = password; this.level = level; this.login = login; this.recommend = recommend; } String id; String name; String passwor..
토비의 스프링 파트 4 예외 올바른 예외처리는 단순히 화면에 오류메시지를 출력하는게 아니다. 무분별하게 무조건 예외를 throws 하는 것도 아니다. 예외를 처리할 때 지켜야 할 핵심원칙은 한가지다. 모든 예외는 적절하게 복구되든지 아니면 작업을 중단시키고 운영자 또는 개발자에게 분명하게 통보돼야 한다. 예외의 종류 체크 예외 Exception 클래스와 RuntimeException을 상속받지 않은 클래스들을 체크 예외라고 한다. 체크 예외는 예외처리를 강제하기 때문에 catch블록에서 예외를 처리하거나 throws를 정의해서 멧드 밖으로 던져야 한다. 언체크 예외 RuntimeException을 상속받은 클래스들을 언체크 예외라고한다. 예외처리를 해주어도 되고 안해줘도 된다. 예외처리 방법 예외 복구 예외상황을 파악하고 문제를 해..
라이브러리와 프레임워크의 관계 프레임워크는 특정 부분의 기술적인 구현을 라이브러리 형태로 제공한다. 특징 프레임워크 라이브러리 유저코드의 작성 프레임워크 클래스를 서브클래싱해서 작성 독립적으로 작성 호출흐름 프레임워크코드가 유저코드를 호출 유저코드가 라이브러리를 호출 실행흐름 프레임워크가 제어 유저코드가 제어 객체의 전동 구조프레임워크가 정의 독자적으로 정의 차이점 라이브러리는 실행 흐름 제어를 개발자의 코드가 관장한다. 프레임워크는 반대로 프레임워크에서 개발자가 만든 클래스를 호출하여 실행의 흐름에 대한 제어를 담당한다. 디자인패턴 + 라이브러리 = 프레임워크
ioc(inversion of control) ioc : 제어의 역전 인스턴스 생성부터 소멸까지의 인스턴스 생명주기 관리를 개발자가 아닌 컨테이너가 대신 해준다 컨테이너 역할을 해주는 프레임워크에게 제어하는 권한을 넘겨서 개발자의 코드가 신경 써야 할 것을 줄인다. 기존에 객체를 개발자가 관리하는 방식이 아니라 스프링이 객체를 관리한다. 메타데이터(xml설정)을 통해 beans를 관리하고 어플리케이션의 중요부분을 형성한다.
디자인 패턴과 프레임워크 디자인 패턴 사용이유 1 요구사항은 수시로 변하는데 그 때 소스코드 변경을 최소화 할 수 있다. 2 팀 프로젝트 시 사람마다 다르게 코딩하는 게 아니라 규칙을 정해서 서로 이해 할 수 있게 한다. 3 보기 편한 직관적인 코드를 통해서 다른 사람이 이해하기 쉽다. 프레임워크 사용이유 1 비기능적인 요소를 매번 구현하는 일을 극복해준다. 2 기능적인 요구사항에 집중할 수 있도록 한다. 3 디자인 패턴과 마찬가지로 반복적으로 발견되는 문제를 해결하기 위한 특화된 솔루션을 제공한다.