본문 바로가기

책/토비의 스프링 3.1(1권, 완)

(6)
6장 AOP 6.1 트랜잭션 코드의 분리 비즈니스 로직과 트랜잭션의 경계를 설정하는 코드가 서로 얽혀있다. public void upgradeLevels() { TransactionStatus status = this.transactionManager.getTransaction(new DefaultTransactionDefinition()); try { **List users = userDao.getAll(); for (User user : users) { if (canUpgradeLevel(user)) { upgradeLevel(user); } }** this.transactionManager.commit(status); } catch (RuntimeException e) { this.transactionManag..
5장 서비스 추상화 5.1 사용자 레벨 관리 기능 DB에 varchar 타입으로 선언하고 “BASIC”, “SILVER”, “GOLD”처럼 문자를 넣는 방법도 있겠지만 이렇게 일정한 종류의 정보를 문자열로 넣는 것은 별로 좋아 보이지 않다. 대신 각 레벨을 코드화해서 숫자로 넣으면 DB용량도 많이 차지하지 않고 가벼워서 좋다. Enum 타입사용 빠르게 실행 가능한 포괄적인 테스트를 만들어두면 기능의 추가나 수정이 일어날 때 그 위력을 발휘한다. 데이터 액세스 로직이 바뀌었다고 비즈니스 로직를 수정하는 일이 있어서는 안된다. UserDaoJDBC는 주어진 User 오브젝트를 DB에 정보를 넣고 읽는 방법에만 관심을 가져야지 비즈니스적인 의미를 지닌 정보를 설정하는 책임을 지는 것은 바람직하지 않다. → 생성자에서 초기 설정 ..
4장 예외 4.1 사라진 SQLException 예외를 catch 했다고 해도 다시 밖으로 예외를 던져줘야 한다. try { ... } catch(SQLException e){ // 예외를 잡고는 아무것도 하지 않는다. 예외 발생을 무시해버리고 정상적인 상황인 것처럼 //다음 라인으로 넘어가겠다는 분명한 의도가 있는 게 아니라면 연습 중에도 절대 만들어서는 안되는 코드이다. } 만약 catch를 하고 다시 던져주지 않으면 시스템 오류나 이상한 결과의 원인이 무엇인지 찾아내기가 매우 힘들다 System.out.println(e)이나 e.printStackTrace()를 통해 메시지를 출력하는 것은 다음과 같은 문제가 존재한다. 다른 로그나 메시지에 금방 묻혀버려 놓칠수 있다. 출력을 하는 것은 예외를 처리하는 것이 ..
3장 템플릿 3장 템플릿 1장 오브젝트와 의존관계 에서 다루었는 OCP를 다음과 같이 정의 내렸다. 💡 변화의 특성이 다른 부분을 구분해주고 각각 다른 목적과 다른 이유에 의해 다른 시점에 독집적으로 변경될 수 있는 효율적인 구조를 만들어주는것이라고 정의내렸다. 그리고 템플릿이란 💡 이렇게 바뀌는 성질이 다른 코드 중에서 변경이 거의 일어나지 않으며 일정한 패턴으로 유지되는 특성을 가진 부분을 자유롭게 변경되는 성질을 가진 부분으로부터 독립시켜서 효과적으로 활용할 수 있도록 하는 방법이다. 3.1 다시 보는 초난감 DAO 정상적인 JDBC 코드의 흐름을 따르지 않고 중간에 어떤 이유로든 예외가 발생했을 경우에도 사용한 리소스를 반드시 반환하도록 만들어야 한다. public void deleteAll() throws ..
2장 테스트 2.1 UserDaoTest 테스트란 결국 내가 예상하고 의도했던 대로 코드가 정확히 동작하는지를 확인해서 만든 코드를 확신할 수 있게 해주는 작업이다. 보통 웹 프로그램에서 사용하는 DAO를 테스트하는 방법은 다음과 같다. DAO를 만든 뒤 바로 테스트하지 않고 서비스 계층, MVC 프레젠테이션 계층까지 포함한 모든 입출력 기능을 대충이라도 코드로 만들고 이를 테스트용 서버에 배치한뒤 웹 화면을 통해 값을 입력하고 버튼을 눌러 등록한다. → DAO뿐만 아니라 서비스 클래스, 컨트롤러, JSP 뷰 등 모든 레이어의 기능을 다 만들고 나서야 테스트가 가능하다는 점이 가장 큰 문제점이다 테스트는 가능하면 작은 단위로 쪼개서 집중해서 할 수 있어야 한다. UserDaoTest는 한 가지 관심에 집중할 수 있게..
1장 오브젝트와 의존관계 1.1 초난감 DAO 자바빈 규약을 따르는 User 클래스 이다. package springbook.user.domain; public class User { String id; String name; String password; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password..