본문 바로가기

스프링

[jdbc]예외처리_전략패턴1

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, cnull 상태임. 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