1. Com.springsource.junit : junit
2. Commons-logging : Spring-context가 사용
3. Mysql-connector : Mysql JDBC
4. Spring-aop : 스프링 기능 자체의 aop
5. Spring-bean : 스프링 빈을 활용하는 경우 필요. 스프링의 XML 설정파일과 자바 애노테이션을 파싱 하는데 필요한 클래스 포함
6. Spring-context : 스프링 코어를 확장한 많은 클래스가 들어 있는데 모든 클래스는 EJB, JNDI(Java Naming Directory Interface), JMX용 클래스와 연동하는데 applicationcontext기능을 사용해야 하며 스프링 리모팅 클래스, 동적 스크립팅 언어(제이루비, 그루비등)와 연동하는 클래스, 빈 유효성검증(JSR-303) API, 스케줄링을 하는 클래스도 포함되어 있다.
7. Spring-core : 모든 스프링 모듈에서 필요한 모듈. 다른 스프링 모듈에서 사용하는 공통 클래스가 포함됨.
8. Spring-dao : EmpltyResultDataAccessException 등 사용을 위한 jar
9. Spring-expression : 스프링 표현언어(SpEL) 지원 클래스 포함.
10. Spring-jdbc : 스프링이 지원하는 jdbc.
11. Spring-test.jar
- @RunWith : Junit 프레임워크의 테스트 실행방법을 확장시 사용.
- SpringJUnit4ClassRunner : 어플리케이션컨텍스트를 만들고 관리하는 확장 클래스
- @ContextConfiguration(경로) : 자동으로 만들어줄 어플리케이션 컨텍스트 설정파일
위 DAO에는 예외처리가 안되어있다 매우 심각한 문제임.
l JDBC코드에서 반드시 지켜야할 원칙(리소스를 반드시 반환해야함)
- 20,21 라인에서 에러가 발생하면 실행이 중단되어 close메서드가 실행되지 않아서 제대로 리소스가 반환되지 않는다.
- 어떤 상황에서도 리소스를 반환하기 위해 try/catch/finally 구문 사용을 권장하고 있다.
75~80. 예외가 발생할 가능성이 있는 코드를 try로 묶어줌.
81~83. 예외가 발생했을 때 부가적인 작업을 해줄 수 있도록 catch블록을 둔다.
83. finally : try 블록에서 예외가 발생했을 때나 안했을 때나 모두 실행됨.
86. close()에서도 SQLException이 발생할 수 있으므로 이를 잡아줘야함. 그렇지 않으면 ps, c변수를 close 안해주고 메소드를 빠져나감
84. null체크 : getConnection() 에서 커넥션을 가져오다가 DB서버문제나, 네트워크 문제로 예외가 발생했다면 ps, c는 null 상태임. Null 상태로 close()를 하면 NullPointException이 발생하므로
96. c.close는 마지막에 있으므로 try/catch를 안해줘도 무방하나 보통 로그를 남기는 등 부가작업이 필요할 수 있으니 catch 블록을 일단 만들어두는 편이 좋음.
* close는 만들어진 순서의 반대로 닫아주는 것이 원칙이다.
이 정도면 실전에 적용해도 문제가 되지 않지만 아쉬움이 남는다.
Try/catch/finally 블록이 2중으로 중첩 되어 나오는데다가, 모든 메소드마다 반복된다.
템플릿 메소드 패턴
전략 패턴의 적용 : 템플릿 메소드 패턴보다 유연하고 확장성이 뛰어남
l OCP(개방 패쇄 원칙) : 컨텍스트는 그대로 유지되면서 전략만 바꿔쓸 수 있다
l 바뀌는 전략 부분은 인터페이스로 구현한다..
인터페이스를 통해서만 의존하도록 만드는 전략
변하는 부분을 인터페이스를 통해 위임하는 방식 > 전략
변하지 않는 부분 > contextMethod > deleteAll()
컨텍스트(deleteAll)는 그대로 유지되면서 전략만 바꿔쓸 수 있다 > OCP > 개방패쇄원칙
55. 하지만, New를 통해 구체적인 전략클래스가 들어갔다.
'스프링' 카테고리의 다른 글
[jdbc]전략패턴_context분리3 (0) | 2020.10.17 |
---|---|
[jdbc] 전략패턴_내부클래스2 (0) | 2020.10.17 |
[spring] junit 3 학습테스트 (0) | 2020.10.13 |
[spring] junit 2 (0) | 2020.10.13 |
[spring] junit 1 (0) | 2020.10.13 |