본문 바로가기

Spring Framework 개발 일지/Spring으로 게시판 만들기

FirstSpringBoard#3-4] Service 인터페이스 구현 & 테스트 코드 수정

반응형

안녕하세요.

저번 시간에 DAO를 직접 호출하는 방법보다 Service인터페이스와 구현 클래스를 이용해서 간접적으로 DB연동 메소드를 호출하는 것이 기능의 변경과 확장에서 더 유용하고 스프링의 AOP 기능을 적용하는 것이 더 좋다고 설명했었죠.

그리고 클래스 다이어그램을 보여드리면서 직접 구현해보는 것을 추천해드렸어요.

아마 타이핑하기 귀찮다고 느끼셨을 수도 있어요.

이번시간에는 IDE의 기능을 적극 활용해서 인터페이스를 만들어서 변경사항을 반영할게요.

IDE에서는 변수와 클래스의 자동완성기능을 제공합니다.

그리고 자바빈 규약에 맞게 getter와 setter 등을 만드는 기능도 지원하죠.

이런 방법을 적극활용해서 오타와 타이핑하는 시간을 줄일 수 있습니다.



1. 우선 BoardDAO.java 파일을 열어주세요.

그리고 alt + Shift + T버튼을 누르고요. Extract Interface...을 선택해주세요.


2. 인터페이스 이름은 BoardService로 정해줍니다. 모든 메소드를 선택해주세요.

Ok를 눌러줍니다. (저는 이미 BoardService 인터페이스를 만들었기 때문에 안만들어 지네요. 여러분들은 정상적으로 생성 될거에요.)

3. 인터페이스가 정상적으로 생성되었는지 확인해주세요.


4. 그런데 문제가 있어요. 아래 클래스 다이어그램을 보면 DAO 클래스는 BoardService를 구현하고 있지 않죠. implements 부분을 지워주어서 전혀 관계없도록 만들어주세요. @Override 애노테이션도 모두 지워주세요.


5. 이제 Ctrl + N을 누르고 Class라고 입력해주세요. Next를 눌러줍니다.



6.  아래 순서대로 클래스명을 입력하고 구현할 인터페이스를 선택해주세요.


Finish 버튼을 눌러주세요. (저는 이미 구현한 상태입니다.)


7, 아래 코드를 보고 구현해주세요. BoardServiceImpl 클래스는 BoardDAO를 참조하고 있습니다.

보통 이런 관계를 연관관계이다. 혹은 의존한다고 표현합니다.


8. 테스트 코드에서 BoardDAO가 아니라 BoardServiceImpl에 의존하도록 바꿔주세요.


이제 이걸로 마이바티스를 이용한 비즈니스 로직 구현 작업은 끝마쳤습니다. 최종적인 프로젝트 디렉토리 구성은 아래와 같습니다.

src/main/resources의 applicationContext.xml과 logback.xml은 무시해주세요.

여러분은 logback.xml의 경우에는 log4j.xml로 프로젝트 생성시에 자동적으로 생성되었을 것이고요.

applicationContext.xml은 아예 존재하지 않을 것입니다.

log4j.xml은 logging관련 설정입니다.

apllicationContext.xml은 비즈니스 로직과 관련된 스프링 컨테이너 설정 파일이에요.

root-context.xml이라는 이름으로 STS에서 프로젝트 생성 시에 자동 생성해주는 파일이에요.

다만 우리는 root-context.xml 파일을 삭제해주었었죠.


이제 다음시간에는 appliccatiionContext.xml 파일을 생성하고 설정해서 객체들의 의존관계들을 스프링 컨테이너에서 관리하도록 할 것입니다.

그리고 마이바티스도 스프링과 연동할 거에요.

여태 SqlSessionFactory를 우리가 직접 구현한 유틸리티 클래스를 통해서 생성하고 SqlSession을 얻어왔었지만 Mybatis에서 제공하는 Spring 연동 모듈을 이용하면 SqlSessionFactoryBean을 스프링 컨테이너에 등록해서 SqlSessionTemplate를 받아 올 수 있어요.

이렇게하면 Commit과 rollback, 트랜잭션 관리, SqlSession 리소스 해제을 스프링에서 해줍니다.

그러면 우리는 유틸리티 클래스를 구현할 필요가 없어지고요.

SqlSession.commit()이나 SqlSession.close()와 같은 중복되는 코드들을 줄일 수 있어요.


반응형