DEV book/토비의 스프링 3.1

DEV book/토비의 스프링 3.1

[토비의 스프링 3.1] 6장 - AOP (1) 직접 구현하는 고립된 단위 테스트

앞서 트랜잭션 경계를 설정하기 위해 서비스 추상화 기법을 사용하였고, UserService안에 트랜잭션 관련한 코드를 기입하였다. AOP를 사용하는 이유 중 가장 대표적인 것은 선언적 트랜잭션 기능이다. 트랜잭션 경계 설정을 조금 더 세련되게 수정하는 과정에서 AOP를 사용해보는 파트이다. 우선, 이전 시간에서 UserServiceTest에서 UserDao와 MailSender 오브젝트를 호출하여 통합 테스트를 진행하는 것을 실습하였다. 각각의 오브젝트를 직접 고립시켜보고, 외부 DB 등과 같은 환경에 종속되지 않는 단위 테스트를 구현해보자. 트랜잭션 코드의 분리 public void upgradeLevels() throws Exception { // 트랜잭션 시작 TransactionStatus sta..

DEV book/토비의 스프링 3.1

[토비의 스프링 3.1] 5장 서비스 추상화 - UserService, TransactionService 추상화

4장에서 데이터베이스에 접근하는 기술이 다양함을 볼 수 있었듯이, 여러 환경이나 상황에서 기술이 바뀌고 다른 API를 사용하기 때문에 성격이 비슷한 여러 기술을 추상화하고 이를 일관되게 사용할 수 있도록 하는 것은 중요하다. 데이터를 가져오고 입력하는 역할을 하는 UserDao에 사용자의 레벨을 관리하는 기능을 추가하고 싶다. 그러나 레벨 관리와 관련한 복잡한 비즈니스 로직은 UserDao가 아닌 비즈니스 로직 서비스를 제공한다는 의미에서 UserService에서 관리한다. UserService는 UserDao의 빈을 DI 받아 사용한다. UserDao의 구현 클래스가 바뀌어도 UserService는 영향을 받지 않는다 public class UserService { UserDao userDao; pub..

DEV book/토비의 스프링 3.1

[토비의 스프링 3.1] 4장 예외 - 예외 처리 전략과 DataAccessException을 사용한 JDBC 한계 극복

모든 예외는 적절하게 복구되거나 작업을 중단시키고 개발자에게 통보되어야 한다. 자바에서 프로그램 상에 Throw 할 수 있는 예외는 총 세가지 종류가 있다. 예외의 종류 java.lang.Error의 서브 클래스 OutOfMemoryError나 ThreadDeath와 같이 자바 VM에서 발생시키는 에러를 말한다. Exception과 Checked Exception 개발자의 애플리케이션 코드에서 발생한 에러이다. Checked Exception이란 Exception의 서브 클래스이면서 RuntimeException을 상속하지 않은 것을 의미한다. 체크 예외가 발생하는 코드를 작성할 때는 예외를 처리하는 코드를 반드시 함께 작성한다. 예를 들어, 존재하지 않는 파일의 이름을 입력한 FileNotFoundEx..

DEV book/토비의 스프링 3.1

[토비의 스프링 3.1] 3장 템플릿 (3) - 템플릿과 콜백

이전 포스팅에서 알아본 UserDao와 JdbcContext, StatementStrategy의 구조는 템플릿/콜백 패턴과 관련이 있다. 템플릿/콜백 패턴 바뀌지 않는 일정한 패턴을 갖는 작업 흐름 ( = 템플릿) 이 존재하고 그 중 일부분을 변경해야하는 전략 패턴 구조에 익명 내부 클래스 ( =콜백)을 활용한 방식을 의미한다. 두 가지 용어에 대해서 조금 더 알아보자. 템플릿 (template) : 어떤 목적을 위해 만들어 둔 고정된 로직(틀)이다. 템플릿 메소드 패턴은 바뀌지 않는 템플릿 메소드를 상위 클래스에 두고, 바뀌는 부분을 서브 클래스의 메소드로 오버라이딩하는 구조를 가지고 있다. 콜백 (callback) : 실행되는 것을 목적으로 다른 오브젝트에 전달되는 오브젝트를 의미한다. 메소드가 담긴..

DEV book/토비의 스프링 3.1

[토비의 스프링 3.1] 3장 템플릿 (2) - JdbcContext를 UserDao에서 사용하는 두 가지 방법

이전 포스팅에서, UserDao의 코드에서 예외처리 구문을 추가하고, 디자인 패턴을 이용해 각 테스트 코드에서 쿼리문을 실행하는 PrepareStatement 객체를 생성하는 작업을 최적화하였다. 변하는 부분을 메소드로 추출한 메소드 추출 기법, 추상 메서드를 오버라이딩하는 템플릿 메소드 패턴, 그리고 인터페이스를 생성하여 각각의 PrepareStatement 생성 방법마다 구현 클래스를 만드는 전략 패턴을 고려하였다. 전략 패턴에서 테스트 메소드 안에 직접적으로 구현 클래스가 결정되는 현상을 막기 위해서 컨텍스트 코드를 분리하고, 테스트 메소드는 하나의 클라이언트로 작동하도록 하였다. 즉 DI를 사용해 클라이언트 (UserDao) 와 컨텍스트 (jdbcContextWithStatementStrategy..

DEV book/토비의 스프링 3.1

[토비의 스프링 3.1] 3장 템플릿 (1) - 디자인 패턴과 DI를 이용한 DAO 최적화

앞서, 초난감 DAO 중에서 변경이 자주 일어나는 부분과 고정된 부분에 대해 효과적으로 활용하기 위한 리팩토링을 진행해보았다. 템플릿이란, 이렇게 서로 다른 부분에서 변경이 거의 일어나지 않는 부분을 자유롭게 변경되는 성질을 가진 부분으로 독립시켜 효과적으로 활용할 수 있게 하는 방법이다. UserDao 예외 처리 기존에 작성하였던 UserDao는 예외처리 구문이 빠져있다. JDBC 코드에서는 어떤 상황에도 정상적으로 리소스를 반환하도록 try/catch/finally 구문을 사용할 것을 권장한다. 기존에 작성하였던 deleteAll 함수를 보자. public void deleteAll() throws SQLException { Connection c = dataSource.getConnection();..

DEV book/토비의 스프링 3.1

[토비의 스프링 3.1] 2장 테스트 - 단위 테스트와 테스트 코드 개선

1장 '오브젝트와 의존관계'에서 확장되고 복잡해져가는 애플리케이션을 고려한 확장을 위해 IoC/DI와 같은 기술을 배우고, 실제로 만든 서비스에 적용해보는 실습을 하였다. 2장에서는 스프링에서 가장 중요한 가치 중 하나인 테스트에 대해 배워볼 것이다. 단위 테스트 (Unit Test) DB Connection을 진행하는 코드를 마음대로 변경하는 작업을 수행하면서, 커넥션이 잘 수행되는 지 확인하기 위해 테스트 코드를 사용할 수 있다. 아래는 사용자의 정보를 만들고, 조회하는 테스트 예제이다. public class UserDaoTest { public static void main(String[] args) throws ClassNotFoundException, SQLException { Applicat..

DEV book/토비의 스프링 3.1

[토비의 스프링 3.1] 1장 오브젝트와 의존관계 (3) - 싱글톤 레지스트리와 의존관계 주입

2023.09.13 - [DEV book/토비의 스프링 3.1] - [토비의 스프링 3.1] 1장 오브젝트와 의존관계 (1) - 전략 패턴을 이용한 DAO 클래스 리팩토링 [토비의 스프링 3.1] 1장 오브젝트와 의존관계 (1) - 전략 패턴을 이용한 DAO 클래스 리팩토링 스프링이란 ? Spring Container(스프링 컨테이너 = Application Context)를 기본 틀로 한다. 스프링은 표준 자바 엔터프라이즈 플랫폼에 기반을 두고 있다. 스프링 프레임워크에서 제공하는 프로그래밍 모 mingyum119.tistory.com 2023.09.13 - [DEV book/토비의 스프링 3.1] - [토비의 스프링 3.1] 1장 오브젝트와 의존관계 (2) - 제어의 역전 (IoC)과 Applicat..

DEV book/토비의 스프링 3.1

[토비의 스프링 3.1] 1장 오브젝트와 의존관계 (2) - 제어의 역전 (IoC)과 ApplicationContext

2023.09.13 - [DEV book] - [토비의 스프링 3.1] 1장 오브젝트와 의존관계 (1) - 전략 패턴을 이용한 DAO 클래스 리팩토링 [토비의 스프링 3.1] 1장 오브젝트와 의존관계 (1) - 전략 패턴을 이용한 DAO 클래스 리팩토링 스프링이란 ? Spring Container(스프링 컨테이너 = Application Context)를 기본 틀로 한다. 스프링은 표준 자바 엔터프라이즈 플랫폼에 기반을 두고 있다. 스프링 프레임워크에서 제공하는 프로그래밍 모 mingyum119.tistory.com 이전 포스팅에서 DAO를 리팩토링하는 과정에서 다양한 디자인 패턴, 객체지향 설계 등을 고려해 최적의 DAO 클래스를 만들어보는 실습을 하였다. 이번 포스팅에서는, 여기에서 사용된 제어의 역..

MINGYUM
'DEV book/토비의 스프링 3.1' 카테고리의 글 목록