본문 바로가기

책 정리/토비의 스프링9

5. 서비스 추상화 1. 트랜잭션 경계설정 JDBC의 트랜잭션 하나의 커넥션을 가져와 사용하다가 닫는 사이에 이루어진다. 따라서 트랜잭션은 커넥션과 주기를 같이한다. Connection c = dataSource.getConnection(); c.setAutoCommit(false); // 트랜잭션 시작 try { PreparedStatement ps = c.prepareStatement("update user..."); c.commit(); // 트랜잭션 커밋 catch (Exception e) { c.rollback(); // 트랜잭션 롤백 } } 2. 트랜잭션 동기화 트랜잭션 동기화란? Connection 오브젝트를 특별한 저장소에 보관해 둔 뒤, 가져다 쓰는 방식이다. 트랜잭션 동기화 적용 TransactionSyn.. 2021. 2. 1.
4. 예외 1. 예외의 종류와 특징 1. Error java.lang.Error 클래스의 서브클래스 시스템에서 비정상적인 상황이 생기는 경우 (OutOfMemoryError / ThreadDeath) -> catch 블록으로 잡아도 아무 대응을 할 수 없음 2. Exception 과 체크 예외 java.lang.Exception 클래스와 그 서브클래스들 이며 RuntimeException을 상속받지 않은 Exception 들 throws 혹은 try/catch 사용이 강제된다. -> 사용하지 않으면 컴파일에러가 날 수 있다. ex) IOException / SQLException 등, 예외상황에서 던져질 수 있는 것들 3. RuntimeException 과 언체크/런타임 예외 체크예외와는 다르게, 예외처리를 강제하.. 2021. 1. 30.
3. 템플릿 0. 템플릿이란 변경이 거의 일어나지 않으며 일정한 패턴으로 유지되는 특성을 가진 부분을 독립시켜서 효과적으로 사용하는 방법 1. 예외처리 기능을 갖춘 DAO 현재까지 구현한 DAO에서는 Connection과 PrepareStatement 를 통해 데이터베이스에서 데이터를 가져온다. 리소스 반환이 필수적이다. pool 방식으로 운영된다. 미리 정해진 풀에 제한된 수의 Connection을 만들어 필요한 경우 사용한다. 예외가 발생할 시, Connection close() 를 해줘야 한다. 2. 리팩토링 1. 템플릿메소드를 통한 리팩토링 자주 변하는 부분 (preparestatement 부분) 에 대해서 상속관계를 통해서 분리한다. 상위클래스의 변경에 민감하게 된다. 유연성 zero 2. 전략 패턴을 통한.. 2021. 1. 23.
2. 테스트 1. JUnit 테스트 수행 방식 수행 방식 @Test 어노테이션이 붙은 void 테스트를 모두 찾는다. 테스트 클래스의 오브젝트를 하나 만든다. @BeforeEach 가 붙은 메소드가 있으면 수행한다. @Test 가 붙은 메소드를 하나 호출하고 결과를 저장한다. @AfterEach 가 붙은 메소드가 있으면 수행한다. 2~5를 반복한다. 모든 테스트의 결과를 반환한다. 이 중에서도, 2번 @Test 를 수행할 때마다 새로운 오브젝트를 만든다. 독립적인 수행을 보장하기 위해서. 2. 테스트를 위한 ApplicationContext 관리 테스트를 만들때마다 새로운 오브젝트를 초기화해주는 과정에서, ApplicationContext를 매번 만드는 것은 빈이 많아지면 시간 / 자원 소모가 크다. 이를 위해서 @.. 2021. 1. 23.