실습에 들어가기 전, 먼저 데이터 서비스를 위한 파일을 준비한 뒤 데이터베이스와 연동하기 위한 작업을 수행해준다.
데이터베이스를 연동하기 위해서는 라이브러리를 추가해주어야 하므로 다음의 코드를 pom.xml 파일에 추가해주었다.
이후 사전에 준비한 NoticeService 클래스의 객체를 사용하기 위해 dispatcher-servlet.xml 파일을 열어 다음과 같이 코드를 수정해준다.
위 코드의 의미는 noticeService라는 이름의 NoticeService 클래스 객체를 생성한 뒤, 이를 setter(setNoticeService)를 통해 ListController에 있는 객체 변수에 대입하겠다는 것이다.
즉, 이제 ListController에 자료형이 NoticeService인 객체 변수와 setter를 구현해주어야 한다.
이후 다음과 같이 해당 객체를 이용하여 데이터베이스에 접근하여 데이터를 받아올 수 있을 것이다.
위에서 받아온 데이터를 출력하기 위해 뷰 페이지(list.jsp)로 이동하여 태그 라이브러리를 추가하고 <tr> 태그 부분을 하나만 남겨둔 뒤, Notice.java 파일의 getter에 따라 다음과 같이 수정해주었다.
이후 index 파일을 통해 페이지를 실행시키고 공지사항 페이지로 이동했을 때 데이터베이스의 데이터대로 결과가 출력되는지 확인한다.
위에서 서비스 객체를 이용해서 데이터베이스 연동하는 간단한 실습을 하였는데, 일반적으로 스프링을 이용할 때에는 위와 같이 컨트롤러가 서비스 클래스를 직접 사용하지 않는다. 다시말해 서비스 객체를 분리해서 사용하여 결합력을 낮추는 것이 일반적이다.
서비스 객체를 분리하기 위해서 우리는 인터페이스(Interface)를 사용할 것이다. 우선 패키지를 생성하여 서비스 방식에 따라 이름을 변경하고 다음과 같이 파일을 분류해주었다.
이후 인터페이스를 'NoticeService'라는 이름으로 추가하여 주었다.
다음으로 ListController 클래스의 코드를 다음과 같이 수정해준다.
이제 NoticeService 인터페이스를 아래와 같이 구현하고 정리한다.
그렇다면 JDBCNoticeService는 위의 인터페이스에 따라 구현된 것이 될 것이다.
이제 dispatcher-servlet.xml 파일로 이동하여 위에서 NoticeService 클래스의 객체를 생성하던 부분을 다음과 같이 수정해준다.
이렇게 하면 우리는 xml 파일의 class 속성만 적절히 변경함으로써 서비스 방식을 손쉽게 변경할 수 있다.
JDBCNoticeService 클래스를 열어보면 데이터베이스 연동을 위한 연결 문자열들이 코드로 구현되어 있는 것을 확인할 수 있다.
위처럼 자바 코드로 연결 정보를 작성해놓으면 데이터베이스 위치 변경, 비밀번호 변경 등으로 인해 연결 정보를 수정하기 위해서는 코드를 직접 다시 수정하고 컴파일 한 뒤, 배포까지 다시해야하는 일이 발생하게 된다. 만약 서비스 클래스의 객체가 여러 개가 있다고 한다면 이는 훨씬 더 심각한 문제가 될 것이다.
따라서 자바 코드로 작성해 놓은 연결 정보 부분을 따로 분리해서 dispatcher-servlet.xml 파일에서 관리하도록 수정하고자 한다.
우선 기존에 연결 정보를 작성했던 구문은 주석처리 해놓은 뒤, 해당 구문 아래에 다음과 같이 코드를 작성해준다.
DataSource는 인터페이스 이므로 객체를 직접 생성할 수는 없기 때문에 따로 setter를 구현해준다.
이후 기존에 있던 Connection을 위한 문장을 모두 주석처리 또는 삭제한 뒤, 다음의 코드로 대체한다.
이제 실질적으로 dataSource 변수에 객체를 대입하기 위해 dispatcher-servlet.xml 파일을 열고 다음과 같이 코드를 추가 및 수정해준다.
이후 페이지를 실행하기 전에 DataSource 라이브러리를 가져오기 위해 pom.xml 파일을 열고 라이브러리를 추가해준다.
이제 페이지를 실행하여 결과를 확인한다.
'🍃 Spring, Spring Boot > 스프링 프레임워크 기초' 카테고리의 다른 글
[Java / Spring] 18. Annotation 활용하기 (0) | 2022.04.23 |
---|---|
[Java / Spring] 17. 스프링 설정파일(dispatcher-servlet.xml) 분리하기 (0) | 2022.04.23 |
[Java / Spring] 15. Tiles 설정하기 (0) | 2022.04.21 |
[Java / Spring] 14. 컨트롤러 추가 및 페이지 모듈 분리 (0) | 2022.04.21 |
[Java / Spring] 13. 정적 파일 서비스하기 (0) | 2022.04.20 |