본문 바로가기

Spring&SpringBoot/<토비의 스프링 3.1 Vol1.1>, 이일민29

템플릿 콜백 패턴으로 가독성 높이기 전략 패턴을 사용해서 변경되지 않는 코드를 컨텍스트에 두고, 변경되는 코드는 인터페이스를 두어 전략 클래스를 구현했다. 클라이언트는 전략 클래스를 생성해 컨텍스트에게 주입하여 사용했다. 이 방법, 다 좋은데.. dao 메소드마다 새로운 구현 클래스를 만드니 클래스 개수가 많아져 번잡스럽다. 어차피 한번 쓰고 말건데! 또 클래스를 분리하니 User와 같이 외부 정보가 필요할 때 매개변수를 받아야 한다. 이 문제를 한번 개선해보자. 익명 내부 클래스로 개선하기 그렇다면 익명 내부 클래스를 사용하자! Dao 안에서 StatementStrategy(전략 인터페이스)를 구현할 수 있으니, 메소드마다 클래스 파일을 따로 만들지 않아도 된다. 필요한 정보가 있으면 내부 필드로 바로 접근 가능하므로 매개변수가 필요하지.. 2023. 3. 13.
반복되는 예외처리, 전략 패턴으로 개선하기 문제 상황 Dao의 JDBC를 이용하는 메소드에서 예외 처리를 해주었더니 유사한 try-catch-finally 문이 반복된다. 계속 이렇게 복붙해서 쓰다가 실수라도 하면 예외 처리가 제대로 안돼서 시스템에 문제가 발생할 수도 있고, 무엇보다 너무 지저분하다. 유지 보수도 어려울 것이다. 반복되는 코드를 캡슐화해서 중복을 줄여보자! // 중복되는 예외 코드 public void deleteAll() throws SQLException { Connection c = null; PreparedStatement ps = null; try { c = dataSource.getConnection(); ps = c.prepareStatement("delete from users"); ps.executeUpdate(.. 2023. 3. 13.
스프링을 사용한 테스트 스프링을 사용하는 테스트는 애플리케이션 컨텍스트가 동작하는 환경에서 빈이 잘 동작하는지를 확인하고 싶을 때 쓴다. 그게 의도가 아니라면 애플리케이션 컨텍스트와 독립적인 유닛 테스트를 작성한다. 애플리케이션 컨텍스트는 생성 비용이 많이 들기 때문에, 애플리케이션 컨텍스트는 생성하면 테스트에서 공유한다. 테스트 전용 설정을 사용하고 싶다면 수동 DI보다는 테스트 전용 설정 파일을 만든다. 테스트를 위한 애플리케이션 컨텍스트 관리 애플리케이션 컨텍스트가 만들어질 때는 모든 싱글톤 빈 오브젝트를 초기화한다. 애플리케이션 컨텍스트는 비용이 많이 드는 편이고, 생성 후에는 변경이 잘 발생하지 않는다. 이런 경우에는 테스트 전체가 공유하는 오브젝트를 만든다. JUnit이 제공하는 @BeforeClass 스태틱 메소드.. 2023. 3. 8.
테스트 도구 JUnit와 객체지향을 위한 테스트 주도 설계 기법 JUnit 소개 JUnit은 사실상 자바의 표준 테스팅 프레임워크다. 스프링 테스트 모듈이 JUnit을 이용하며, 스프링 프레임워크 자체도 JUnit을 사용해 만들어졌다. 애플리케이션 규모가 커지면 테스트가 많아지고, 테스트 수행 부담이 커진다. JUnit은 테스트 결과를 종합해서 보고 실패한 곳을 빠르게 확인하는 뷰를 제공한다. 또 일관적인 실행 결과를 위해 패턴을 지원하고, 많은 테스트를 간단히 실행시킬 수 있다. JUnit의 테스트 메소드 실행 방법 JUnit은 테스트 메소드가 실행될 때마다 새로운 테스트 인스턴스를 생성한다. 그 이유는 테스트가 독립적으로 실행됨을 보장하기 위함이다. JUnit이 하나의 테스트 클래스를 가져와 테스트를 수행하는 방법은 다음과 같다. 테스트 클래스에서 @Test가 붙.. 2023. 3. 8.
테스트 코드는 왜 사용하고, 어떻게 작성해야 하는가? 테스트의 유용함 테스트는 내가 의도했던 대로 코드가 정확히 동작하는지 확인해서, 만든 코드를 확신할 수 있게 해주는 작업이다. 코드를 개선하는 과정에서 그것이 처음과 동일한 기능을 수행함을 보장해줄 수 있다. 테스트는 개발자가 마음 편하게 잠자리에 들 수 있게 해주는 것이다. 수동 테스트 vs 자동 테스트 웹으로 수동 테스트를 하게되면 서버 띄우고 입력하고 클릭까지 해야하므로 실행이 번거롭다. 테스트 수행에 참여하는 클래스의 코드가 많기 때문에 오류 원인을 찾기 어렵다. 반면 자동 테스트는 코드로 작성한다. 실행이 간편하기 때문에 반복 수행이 가능하다. 자동 테스트는 테스트 클래스에 별도로 보관한다. 단위 테스트와 관심사 분리 테스트 코드에 관심사 분리를 적용하면 그 대상에만 집중해서 테스트할 수 있다... 2023. 3. 8.
applicationContext.xml로 객체 관계 설정하기 스프링은 빈의 생성과 관리를 담당한다. 개발자는 객체의 관계를 설정하는 책임만 가지면 된다. 이때 객체 관계를 설정하는 방법은 여러가지가 있다. 자바 클래스를 사용해도 되지만, 보다 간편한 xml 파일로 관계 설정 정보를 작성하는 것이 일반적이다. 이 예제에서는 자바 클래스로 작성된 객체 관계를 xml 파일로 변경해본다. (하지만 스프링 mvc를 사용하는 요즘.. 다 애노테이션 쓰지 xml은 안 쓴다) 다음과 같이 자바 클래스로 작성된 객체 관계를 xml 파일로 변경해보자. @Configuration public class DaoFactory { @Bean public UserDao userDao() { UserDao userDao = new UserDao(); userDao.setConnectionMa.. 2023. 3. 2.